- Do you have International Customers? Are you getting confused among the vendor currency and your local company currency?
- Here is the solution for you.
- This app will give a view over the total amount of a single Purchase Order in your default company currency.
-
-
-
-
- Configuration
-
-
- No additional configuration required
-
-
-
-
-
-
-
- Features
-
-
-
- Total purchase amount in company currency of the purchase quotation tree view.
-
-
-
- Total purchase amount in company currency of the purchase order tree view.
-
-
- Total purchase amount in company currency of the vendor bill tree view.
-
-
-
- Total purchase amount in company currency of the vendor credit note tree view.
+ Do you have International Customers? Are you getting confused among the vendor currency and your
+ local company currency? Here is the solution for you. This app will give a view over the total
+ amount of a single Purchase Order in your default company currency.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Total purchase amount in company currency of the purchase quotation tree view
+
+
+
+
+
+
+
+
+
+ Total purchase amount in company currency of the purchase order tree view
+
+
+
+
+
+
+
+
+
+
+ Total purchase amount in company currency of the vendor bill tree view
+
+
+
+
+
+
+
+
+
+
+ Total purchase amount in company currency of the vendor credit note tree view
- Provides a new provision for managing the company asset documents, expiry notifications and other informations.
- Also manages the asset serial number.
-
-
-
-
- Configuration
-
-
- The app is depends upon the Odoo's default Asset Management module and it will be only available in
- Enterprise of Odoo V12.
-
-
-
-
-
-
-
- Features
-
-
-
- Provision to manage the serial number in the asset category
-
-
-
- Automatic generation of serial number for asset under an asset category.
-
-
- Provision to manage asset documents
-
-
-
- Manages document notification through emails
-
-
- Provision to add other informations of the assets
-
-
-
-
-
-
- Screenshots
-
-
-
- Here you can manage the serial number of different assets under this asset category.
-
-
-
-
-
-
- The serial number will automatic comes here according to asset category type.
-
-
-
-
-
-
- New provision to manage asset documents and its expiry.
-
-
-
-
-
-
- New provision to add any information regarding the asset.
-
+ Provides a new provision for managing the company asset documents, expiry notifications and other
+ informations. Also manages the asset serial number.
+
+
+
+
+
+
+
+ Configuration
+
+
+
+
+
+ The app is depends upon the Odoo's default Asset Management module and it will be only available in
+ Enterprise of Odoo V12.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Provision to manage the serial number in the asset category
+
+
+
+
+
+
+
+
+
+ Automatic generation of serial number for asset under an asset category
+
+
+
+
+
+
+
+
+
+
+ Provision to manage asset documents
+
+
+
+
+
+
+
+
+
+
+ Manages document notification through emails
+
+
+
+
+
+
+
+
+
+
+ Provision to add other informations of the assets
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Here you can manage the serial number of different assets under this asset category
+
+
+
+
+
+
+ The serial number will automatic comes here according to asset category type
+
+
+
+
+
+
+ New provision to manage asset documents and its expiry
+
+
+
+
+
+
+
+ New provision to add any information regarding the asset
\ No newline at end of file
diff --git a/auto_database_backup/README.rst b/auto_database_backup/README.rst
new file mode 100644
index 000000000..3d506359e
--- /dev/null
+++ b/auto_database_backup/README.rst
@@ -0,0 +1,42 @@
+.. image:: https://img.shields.io/badge/licence-LGPL--3-green.svg
+ :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
+ :alt: License: LGPL-3
+
+Auto Database Backup
+====================
+* Generate Database Backups and store to multiple locations
+
+License
+=======
+General Public License, Version 3 (LGPL v3).
+(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
+
+Company
+=======
+* Cybrosys Techno Solutions __
+
+Credits
+=======
+* Developer: (v12) Ajmunnisa @ Cybrosys, Farhana Jahan PT @ Cybrosys ,
+Contact : odoo@cybrosys.com
+
+Contacts
+========
+* Mail Contact : 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/auto_database_backup/__init__.py b/auto_database_backup/__init__.py
new file mode 100644
index 000000000..9b4ada7a5
--- /dev/null
+++ b/auto_database_backup/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import controllers
+from . import models
+from . import wizard
diff --git a/auto_database_backup/__manifest__.py b/auto_database_backup/__manifest__.py
new file mode 100644
index 000000000..8f93281ae
--- /dev/null
+++ b/auto_database_backup/__manifest__.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+{
+ 'name': "Auto Database Backup",
+ 'version': '12.0.1.0.1',
+ 'category': 'Extra Tools',
+ 'summary': 'Generate automatic backup of databases and store to local, '
+ 'google drive, dropbox, nextcloud, amazon S3, onedrive or '
+ 'remote server',
+ 'description': 'This module has been developed for creating database '
+ 'backups automatically and store it to the different '
+ 'locations,database backup, backup, Google Drive, Dropbox, '
+ 'Onedrive, Nextcloud, Amazon S3, automatic backup',
+ 'author': "Cybrosys Techno Solutions",
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['mail', 'google_drive'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'data/ir_cron_data.xml',
+ 'data/mail_template_data.xml',
+ 'views/db_backup_configure_views.xml',
+ 'wizard/dropbox_auth_code_views.xml'
+ ],
+ 'external_dependencies': {
+ 'python': ['dropbox', 'pyncclient', 'boto3', 'nextcloud-api-wrapper','paramiko']},
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'LGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/auto_database_backup/controllers/__init__.py b/auto_database_backup/controllers/__init__.py
new file mode 100644
index 000000000..e9b606a5a
--- /dev/null
+++ b/auto_database_backup/controllers/__init__.py
@@ -0,0 +1 @@
+from . import auto_database_backup
diff --git a/auto_database_backup/controllers/auto_database_backup.py b/auto_database_backup/controllers/auto_database_backup.py
new file mode 100644
index 000000000..7eac449bc
--- /dev/null
+++ b/auto_database_backup/controllers/auto_database_backup.py
@@ -0,0 +1,33 @@
+import json
+from odoo import http
+from odoo.http import request
+
+
+class OnedriveAuth(http.Controller):
+ """Controller for handling authentication with OneDrive and Google Drive."""
+ @http.route('/onedrive/authentication', type='http', auth="public")
+ def oauth2callback(self, **kw):
+ """
+ Callback function for OneDrive authentication.
+
+ :param kw: A dictionary of keyword arguments.
+ :return: A redirect response.
+ """
+ state = json.loads(kw['state'])
+ backup_config = request.env['db.backup.configure'].sudo().browse(
+ state.get('backup_config_id'))
+ backup_config.get_onedrive_tokens(kw.get('code'))
+ backup_config.hide_active = True
+ backup_config.active = True
+ return http.local_redirect(state.get('url_return'))
+
+ @http.route('/google_drive/authentication', type='http', auth="public")
+ def gdrive_oauth2callback(self, **kw):
+ """Callback function for Google Drive authentication."""
+ state = json.loads(kw['state'])
+ backup_config = request.env['db.backup.configure'].sudo().browse(
+ state.get('backup_config_id'))
+ backup_config.get_gdrive_tokens(kw.get('code'))
+ backup_config.hide_active = True
+ backup_config.active = True
+ return http.local_redirect(state.get('url_return'))
diff --git a/auto_database_backup/data/ir_cron_data.xml b/auto_database_backup/data/ir_cron_data.xml
new file mode 100644
index 000000000..6d6d9ce90
--- /dev/null
+++ b/auto_database_backup/data/ir_cron_data.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Backup : Automatic Database Backup
+
+ code
+ model._schedule_auto_backup()
+ 1
+ days
+ -1
+ False
+
+
+
diff --git a/auto_database_backup/data/mail_template_data.xml b/auto_database_backup/data/mail_template_data.xml
new file mode 100644
index 000000000..e8760d086
--- /dev/null
+++ b/auto_database_backup/data/mail_template_data.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+ Database Backup: Notification Successful
+
+ Database Backup Successful:
+ ${object.db_name}
+
+ ${object.user_id.email_formatted | safe}
+
+
+
+ Dear ${object.user_id.sudo().name},
+
+
+
+ Backup of the database
+ ${object.db_name}
+ has been successfully
+ generated and stored to
+ % if object.backup_destination in ('local'):
+ Local
+ % elif object.backup_destination in ('google_drive'):
+ Google Drive
+ % elif object.backup_destination in ('ftp'):
+ FTP Server
+ % elif object.backup_destination in ('sftp'):
+ SFTP Server
+ % endif
+ .
+
+
+ Database Name: ${object.db_name}
+
+ Destination:
+ % if object.backup_destination in ('local'):
+ Local
+ % elif object.backup_destination in ('google_drive'):
+ Google Drive
+ % elif object.backup_destination in ('ftp'):
+ FTP Server
+ % elif object.backup_destination in ('sftp'):
+ SFTP Server
+ % endif
+ % if object.backup_destination in ('local', 'ftp',
+ 'sftp')
+
+ Backup Path:
+ % if object.backup_destination in ('local'):
+ ${object.backup_path}
+ % elif object.backup_destination in ('ftp'):
+ ${object.ftp_path}
+ % elif object.backup_destination in ('sftp'):
+ ${object.sftp_path}
+ % endif
+ % endif
+
+ Backup Type: ${object.backup_format}
+
+ Backup FileName: ${object.backup_filename}
+
+
+ This module helps to generate backups of your databases automatically on
+ regular interval of times. The generated backups can be stored into
+ local storage, ftp server, sftp server, dropbox,nextcloud, Google Drive
+ or Onedrive and Amazon S3. User can enable auto remove option to automatically delete
+ old backups. User can enable email notification to be notified about the
+ success and failure of the backup generation and storage.
+ Using Automatic Database Backup module user can generate and store
+ database backups to multiple location.
+
+
+
+ This module uses an external python dependency 'dropbox'.Before
+ installing the module install the python
+ package
+ first.The required python package can be installed using the
+ following command,
+
+ pip install dropbox
+
+
+
+ This module uses an external python dependency 'nextcloud'.Before
+ installing the module install the python
+ package
+ first.The required python package can be installed using the
+ following command,
+
+ pip install pyncclient
+
+
+
+
+ This module uses an external python dependency 'nextcloud-api-wrapper'.Before
+ installing the module install the python
+ package
+ first.The required python package can be installed using the
+ following command,
+
+ pip install nextcloud-api-wrapper
+
+
+
+
+ This module uses an external python dependency 'Boto3'.Before installing
+ the module install the python
+ package
+ first.The required python package can be installed using the following
+ command,
+
+ pip install boto3
+
+
+
+
+ This module uses an external python dependency 'paramiko'.Before
+ installing the module install the python
+ package
+ first.The required python package can be installed using the following
+ command,
+
+ pip install paramiko
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Community & Enterprise Support
+
+ Available in Odoo 12.0 Community and Enterprise.
+
+
+
+
+
+
+
+
+ Generate Database Backup
+
+ Generate database backups on regular intervals.
+
+
+
+
+
+
+
+
+
+ Store Backup to FTP Server
+
+ Generated backup can be stored to remote FTP server.
+
+
+
+
+
+
+
+
+
+ Store Backup to SFTP Server
+
+ Generated backup can be stored to remote SFTP server.
+
+
+
+
+
+
+
+
+
+ Store Backup to Google drive
+
+ Generated backup can be stored to google drive
+
+
+
+
+
+
+
+
+ Store Backup to Onedrive
+
+ Generated backup can be stored to Onedrive
+
+
+
+
+
+
+
+
+
+ Store Backup to Nextcloud
+
+ Generated backup can be stored to Nextcloud
+
+
+
+
+
+
+
+
+
+ Store Backup to Amazon S3
+
+ Generated backup can be stored to Amazon S3
+
+
+
+
+
+
+
+
+
+ Automatically remove old backups.
+
+ Old backups files will be deleted automatically based on the obsolescence of backup.
+
+
+
+
+
+
+
+
+
+ Notify user on success and failure of backup generation
+
+ An email notification send to user on successful backup generation also send an email notification when backup operation failed.
+ Enter the database name and master password. specify backup type and destination.
+ Enter the backup directory path, if directory does not exist new directory will be created.
+
+
+
+
+
+
+ Store Backup to Remote SFTP Server
+
+ Select backup destination as SFTP, enter credentials.
+ Test connection button to check whether the connection is successful.
+
+
+
+
+ A successful message will be displayed if connection is successful
+
+
+
+
+ An error message will be displayed if test connection is failed
+
+
+
+
+
+
+
+ Store Backup to Remote FTP Server
+
+ Select backup destination as FTP, enter credentials.
+ Test connection button to check whether the connection is successful.
+
+
+
+
+
+
+ Store Backup to Google Drive
+
+ You'll need to create a
+ new
+ Google API project and enabling the Google Drive API, Go to the
+ Google API Console and log into your
+ account.
+ While creating the project, for the Redirect URI restrictions,
+ copy your Odoo database URI followed by
+ /google_drive/authentication. Example:
+
+
+ ENABLE API AND SERVICES
+
+
+ ENABLE GOOGLE DRIVE API
+
+
+ Create Credentials,
+ Follow
+ the steps, select Website application for the Application
+ Type.
+
+
+ Under the Authorized
+ JavaScript Origins section, click + Add URI and type your
+ company's Odoo URL address.
+ Under the Authorized redirect URIs section, click + Add URI and
+ type your company's Odoo URL address
+ followed
+ by /google_drive/authentication.
+ After all the steps are completed, A Client ID and Client secret will
+ be given, copy the credentials
+
+
+
+
+ Go to the "OAuth consent screen", then Test users and click on 'ADD USERS' then add the user.
+
+
+
+
+
+
+ Configure Backup, Copy Client ID and Client Secret from Google Drive API Credentials page into their respective fields.
+
+
+
+
+ Setup Token, it will be redirected to an authorization page.
+
+
+
+
+
+
+
+
+
+
+ Store Backup to Dropbox
+
+
+ To get the app key and secret key go to the App
+ Console.
+ Create a new app
+
+
+
+ Once you created the App , you can get the App key and App Secret as seen in the screenshot
+
+ Choose your app's permission (files.content.write and files.content.read permissions required).then click on Submit
+
+ Choose Dropbox as that of the backup destination. Enter the app secret and key and dropbox Folder.
+
+
+ Get the Authorization
+ Code
+ and click confirm.
+
+
+
+
+
+ Store Backup to
+ Onedrive
+
+
+ Select Backup
+ Destination
+ as OneDrive. Enter the App key and App secret.
+ you'll need to register a new app in the Microsoft
+ Azure
+ portal.
+ While registering the app for the Redirect URI restrictions,
+ copy your Odoo database URI followed by
+ /onedrive/authentication. Example:
+
+
+ Copy the Client ID
+
+
+ Generate Client
+ Secret.
+
+
+
+ Get OneDrive folder ID,
+ where need to store the backup files.
+
+
+ Configure the
+ Backup
+
+
+ Setup Token, it will
+ be
+ redirected to an authorization page.
+
+
+
+
+ Store Backup to
+ Nextcloud
+
+
+
+ To Create an account in Nextcloud go to
+ https://nextcloud.com/sign-up/, Enter Your Email Address and
+ Sign up .
+
+
+
+
+ You will be redirected to the page as shown in the screenshot,
+ and it will ask you enter your email and password for the
+ Nextcloud.
+
+
+
+ To get the Domain of the Nextcloud.Go to Settings in the
+ Nextcloud and Click on Mobile & desktop. You will see server
+ address Copy link and paste it in your Domain Name.
+
+
+
+
+ Select the backup destination as Nextcloud. Enter the Domain
+ Name, UserName, Password and Folder Name where you want to store
+ your backup on the NextCloud server. Check the Connect button
+ to check if the connection is successful.
+
+
+
+
+ Every day, a Scheduled Action will take place to store a backup
+ on the Nextcloud Server. The backup will be stored as the folder
+ name provided in the Folder ID field in Odoo.
+
+
+
+
+ After you created the account.You need to get the Access Key and
+ Secret Key,To get these go the account Security credentials and
+ go the Access Keys and create new access keys from there you
+ will get Access Key and Secret Key.
+
+
+
+
+
+
+
+
+
+
+ Next You need to create a Bucket Folder in the Amazon S3.To do
+ that Go the Services in the top right and go to Storage and S3
+ as shown in the Screen shot.
+
+
+
+ To create Bucket folder,Click on the Create bucket Button.
+
+
+
+ On Creating a Bucket Folder,Check the rules for naming the
+ Bucket folder,and Select the region as well.After that click on
+ the create Bucket Button in the bottom of the page.
+
+
+ You will see the Bucket Folder as shown in the screenshot.
+
+
+
+ Select Backup Destination as Amazon S3. Enter the Amazon S3
+ Access Key,Amazon S3 Secret Key,Bucket Name->Bucket folder you
+ have created in the Amazon S3 and the File Name->The Folder You
+ want to store your backup in Amazon S3 Bucket Folder.Test
+ connection button to check whether the connection is
+ successful.
+
+
+
+ Every day, a Scheduled Action will take place to store a backup
+ on the Amazon S3 Server. The backup will be stored as the folder
+ name provided in the File Name field in Odoo.
+
+
+
+
+
+
+
+
+ Notify User on Success and Failure of Backup Generation
+
+ Enable notify user option, and select a user to notify. An email notification will be sent to the selected user on
+ backup successful and failure.
+
+
+
+
+
+ Successful backup notification email
+
+
+
+
+
+ Notification email when backup generation failed
+
+
+
+
+
+
+ Scheduled Action For Generating Backup
+
+
+ Enable the 'Automatic database Backup' scheduled action, and set up the execution interval.
+ Based on the scheduled action setup, backups will be generated on regular intervals.
+
+
+ {'search_default_all': 1}
+
+
+
+
+
+
diff --git a/auto_database_backup/wizard/__init__.py b/auto_database_backup/wizard/__init__.py
new file mode 100644
index 000000000..75b6f75ea
--- /dev/null
+++ b/auto_database_backup/wizard/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import dropbox_auth_code
diff --git a/auto_database_backup/wizard/dropbox_auth_code.py b/auto_database_backup/wizard/dropbox_auth_code.py
new file mode 100644
index 000000000..ce788d50e
--- /dev/null
+++ b/auto_database_backup/wizard/dropbox_auth_code.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import api, fields, models
+
+
+class DropboxAuthCode(models.TransientModel):
+ """Model for managing the Dropbox authentication code and URL.
+ Methods:
+ _compute_dropbox_auth_url:
+ Compute method to retrieve the Dropbox authentication URL
+ action_setup_dropbox_token:
+ Method to set up the Dropbox token using the provided authorization
+ code.
+ """
+ _name = 'dropbox.auth.code'
+ _description = 'Dropbox Authentication Code Wizard'
+
+ dropbox_authorization_code = fields.Char(string='Authorization Code',
+ help='Authorization code received'
+ 'from Dropbox')
+ dropbox_auth_url = fields.Char(string='Dropbox Authentication URL',
+ compute='_compute_dropbox_auth_url',
+ help='URL for Dropbox authentication')
+
+ @api.depends('dropbox_authorization_code')
+ def _compute_dropbox_auth_url(self):
+ """Compute method to retrieve the Dropbox authentication URL"""
+ backup_config = self.env['db.backup.configure'].browse(
+ self.env.context.get('active_id'))
+ dropbox_auth_url = backup_config.get_dropbox_auth_url()
+ for rec in self:
+ rec.dropbox_auth_url = dropbox_auth_url
+
+ def action_setup_dropbox_token(self):
+ """Method to set up the Dropbox token using the provided authorization
+ code."""
+ backup_config = self.env['db.backup.configure'].browse(
+ self.env.context.get('active_id'))
+ backup_config.hide_active = True
+ backup_config.active = True
+ backup_config.set_dropbox_refresh_token(self.dropbox_authorization_code)
diff --git a/auto_database_backup/wizard/dropbox_auth_code_views.xml b/auto_database_backup/wizard/dropbox_auth_code_views.xml
new file mode 100644
index 000000000..b1533b7c6
--- /dev/null
+++ b/auto_database_backup/wizard/dropbox_auth_code_views.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ dropbox.auth.code.view.form
+ dropbox.auth.code
+
+
+
+
+
diff --git a/auto_fill/README.rst b/auto_fill/README.rst
deleted file mode 100755
index 2956b8ff0..000000000
--- a/auto_fill/README.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-Auto Fill Widget
-================
-* Widget that suggests field value in existing records
-* Widget = **auto_fill**
-
-Developer
-=========
-* Developer:
- odoo v11 Avinash Nk (odoo@cybrosys.com)
- odoo v12 Akshay Babu
-Contacts
-========
-* Cybrosys Technologies
diff --git a/auto_fill/__init__.py b/auto_fill/__init__.py
deleted file mode 100755
index a7d50eeee..000000000
--- a/auto_fill/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-###################################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-# Copyright (C) 2018-TODAY Cybrosys Technologies ().
-# Author: Avinash Nk()
-#
-# This program is free software: you can modify
-# it under the terms of the GNU Affero General Public License (AGPL) as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# 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 for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-###################################################################################
-
-from . import controllers
diff --git a/auto_fill/__manifest__.py b/auto_fill/__manifest__.py
deleted file mode 100755
index b6f53815a..000000000
--- a/auto_fill/__manifest__.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-###################################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-# Copyright (C) 2018-TODAY Cybrosys Technologies ().
-# Author: Avinash Nk()
-#
-# This program is free software: you can modify
-# it under the terms of the GNU Affero General Public License (AGPL) as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# 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 for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-###################################################################################
-{
- 'name': 'Auto Fill Widget',
- 'version': '12.0.1.0.0',
- 'summary': """Widget that suggests field value from existing records""",
- 'description': 'Widget for auto completing a character field according to its existing record values',
- 'category': 'Extra Tools',
- 'author': 'Cybrosys Techno Solutions',
- 'company': 'Cybrosys Techno Solutions',
- 'website': "https://www.cybrosys.com",
- 'depends': ['base'],
- 'qweb': ['static/src/xml/auto_fill.xml'],
- 'data': ['views/auto_fill_templates.xml'],
- 'images': ['static/description/banner.jpg'],
- 'license': 'AGPL-3',
- 'installable': True,
- 'auto_install': False,
- 'application': False,
-}
diff --git a/auto_fill/controllers/__init__.py b/auto_fill/controllers/__init__.py
deleted file mode 100755
index e56d9d4e0..000000000
--- a/auto_fill/controllers/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-###################################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-# Copyright (C) 2018-TODAY Cybrosys Technologies ().
-# Author: Avinash Nk()
-#
-# This program is free software: you can modify
-# it under the terms of the GNU Affero General Public License (AGPL) as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# 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 for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-###################################################################################
-
-from . import main
diff --git a/auto_fill/controllers/main.py b/auto_fill/controllers/main.py
deleted file mode 100755
index a98f1d8a9..000000000
--- a/auto_fill/controllers/main.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-###################################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-# Copyright (C) 2018-TODAY Cybrosys Technologies ().
-# Author: Avinash Nk()
-#
-# This program is free software: you can modify
-# it under the terms of the GNU Affero General Public License (AGPL) as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# 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 for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-###################################################################################
-
-from odoo.http import request
-from odoo import http
-
-
-class GetMatchingRecords(http.Controller):
-
- @http.route(['/matching/records'], type='json', auth="none")
- def get_matching_records(self, **kwargs):
- model = str(kwargs['model'])
- field = str(kwargs['field'])
- value = str(kwargs['value'])
- model = model.replace(".", "_")
- cr = request.cr
- if len(value) > 0:
- query = """SELECT %s FROM %s WHERE %s ~* '%s' GROUP BY %s""" % (field, model, field, value, field)
- cr.execute(query)
- res = cr.fetchall()
- else:
- res = []
- return res
diff --git a/auto_fill/doc/RELEASE_NOTES.md b/auto_fill/doc/RELEASE_NOTES.md
deleted file mode 100644
index 6be164058..000000000
--- a/auto_fill/doc/RELEASE_NOTES.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Module
-
-#### 30.04.2019
-#### Version 12.0.1.0.0
-##### ADD
-- Initial Commit
diff --git a/auto_fill/static/description/auto_fill.gif b/auto_fill/static/description/auto_fill.gif
deleted file mode 100644
index d8c354343..000000000
Binary files a/auto_fill/static/description/auto_fill.gif and /dev/null differ
diff --git a/auto_fill/static/description/banner.jpg b/auto_fill/static/description/banner.jpg
deleted file mode 100755
index 434e8bfe3..000000000
Binary files a/auto_fill/static/description/banner.jpg and /dev/null differ
diff --git a/auto_fill/static/description/icon.png b/auto_fill/static/description/icon.png
deleted file mode 100755
index 538cbf146..000000000
Binary files a/auto_fill/static/description/icon.png and /dev/null differ
diff --git a/auto_fill/static/description/index.html b/auto_fill/static/description/index.html
deleted file mode 100755
index c8659db0d..000000000
--- a/auto_fill/static/description/index.html
+++ /dev/null
@@ -1,337 +0,0 @@
-
-
-
- Auto Fill Widget
-
-
- Widget that suggests field value from existing records
-
- Directing your customers straight to checkout after they found a product of their choice, and this is exactly what Buy Now Website does. The module adds a button to shop page that helps to purchase a single product by skipping the cart page. Select a product, click on the button, you are straightly directed to the confirmation page of the website.
-
-
-
-
-
-
Buy Now Website
-
-
-
-
Available in Odoo 12.0 community edition .
-
-
The module help quick checkout for buyers looking to buy a single product at a time.
-
-
When 'Buy Now' button is clicked, a new cart will create and add the entire product and directly moves to confirmation page of the website.
-
-
The purchase through the 'Buy Now' button cannot effect existing cart.
-
-
+
+
+
+
+
+ Buy Now Website
+
+ Quick Check Out On a Button Click
+
+
-
-
-
-
-
-
-
Screenshots
-
-
-
-
-
-
-
-
-
Click on the button "Buy Now" to purchase. It moves to the confirmation page.
-
-
-
-
-
-
-
-
The Order Confirmation page. Click on the 'pay button to confirm payment'.
+ Directing your customers straight to checkout after they found a product of their choice, and this is
+ exactly what Buy Now Website does. The module adds a button to shop page that helps to purchase a single
+ product by skipping the cart page. Select a product, click on the button, you are straightly directed to
+ the confirmation page of the website.
- Currently in Odoo community edition there is no Cash-Flow Statements. A cash flow statement is a financial statement that provides aggregate data regarding all cash inflows a company receives from its ongoing operations and external investment sources, also includes all cash outflows that pay for business activities and investments during a given period.
-
-
-
-
-
-
Cash-Flow Statements
-
-
-
-
- Cash-flow statements for Odoo12 community edition.
-
- Shows the amount of cash in and out flow.
-
-
- Can set accounts for each cash flow types.
-
- Separately views the credit and debit values of each accounts.
-
+
+
+
+
+
+ Cash Flow Statement In Odoo
+
+ Print PDF Reports of Cash Flow Statements
+
+
-
-
-
-
-
-
-
Screenshots
-
-
-
-
-
-
-
-
-
After installation, go to Configuration > Chart of Accounts to configure chart of accounts.
-
-
-
-
-
-
-
-
-
Choose one account that you want to configure and set corresponding cash flow type.
+ Currently in Odoo community edition there is no Cash-Flow Statements. A cash flow statement is a
+ financial statement that provides aggregate data regarding all cash inflows a company receives from
+ its ongoing operations and external investment sources, also includes all cash outflows that pay for
+ business activities and investments during a given period.
+
- This module adds a new feature, 'Customer Due Analysis' to Odoo.
-
-
-
-
-
-
-
- Features
-
-
-
- We can get the details of invoices which is due and also the due days of that invoice
-
-
-
-
-
-
-
-
- Screenshots
-
-
-
-
- A new menu, 'Customer Due Analysis' is added under Invoicing -> Reporting for performing this analysis.
- Clicking on this menu will open a new wizard.
-
+ This module adds a new feature, 'Customer Due Analysis' to Odoo.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ We can get the details of invoices which is due and also the due days of that invoice
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ A new menu, 'Customer Due Analysis' is added under Invoicing -> Reporting for performing this
+ analysis. Clicking on this menu will open a new wizard.
\ No newline at end of file
diff --git a/dynamic_partner_fields/static/description/index.html b/dynamic_partner_fields/static/description/index.html
index 18a1da9e0..55dfca462 100644
--- a/dynamic_partner_fields/static/description/index.html
+++ b/dynamic_partner_fields/static/description/index.html
@@ -287,7 +287,7 @@
If you have anything to share with us based on your use of this module, please let us know. We are ready to offer our support.
If you have anything to share with us based on your use of this module, please let us know. We are ready to offer our support.
Email us
-
odoo@cybrosys.com / info@cybrosys.com
+
odoo@cybrosys.com
Contact Us
diff --git a/email_id_validation/README.rst b/email_id_validation/README.rst
new file mode 100644
index 000000000..cd8873848
--- /dev/null
+++ b/email_id_validation/README.rst
@@ -0,0 +1,66 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Email Verification for Partner and Employee
+===========================================
+With this plugin, you can validate the E-mail ID entered in Partner/Employee form. This app will help
+you to maintain a consistent and reliable address details for your Partner/Employee.
+
+Installation
+============
+- www.odoo.com/documentation/12.0/setup/install.html
+- Install our custom addon
+
+Configuration
+=============
+You must install following packages to work the App properly:
+* pip install validate_email
+* pip install py3DNS
+
+NOTE: Since the Plugin performs verification through online you must be connected to the internet while
+checking the ID
+
+Features
+========
+* Email address of partners in odoo will remain valid and maintain reliability in address details.
+* Invalid email address will not be able to store in email field.
+
+Company
+=======
+* `Cybrosys Techno Solutions `__
+
+License
+=======
+GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3)
+(http://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Bug Tracker
+===========
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Credits
+=======
+* Developer: (V12) RAHUL C K, 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 https://www.cybrosys.com.
+
+Further information
+===================
+HTML Description: ``__
diff --git a/email_id_validation/__init__.py b/email_id_validation/__init__.py
new file mode 100644
index 000000000..8a28dd1a2
--- /dev/null
+++ b/email_id_validation/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+#
+# 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/email_id_validation/__manifest__.py b/email_id_validation/__manifest__.py
new file mode 100644
index 000000000..7f5abd002
--- /dev/null
+++ b/email_id_validation/__manifest__.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+#
+# 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': "Email Verification for Partner and Employee",
+ 'version': '12.0.1.0.0',
+ 'category': 'Discuss',
+ 'summary': """Check Whether A Given E-mail ID Is Valid Or Not""",
+ 'description': """Check Whether A Given E-mail ID Is Valid Or Not In
+ Partner And Employee Form""",
+ 'author': "Cybrosys Techno Solutions",
+ 'company': "Cybrosys Techno Solutions",
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['base', 'hr'],
+ 'external_dependencies': {'python': ['validate_email']},
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/email_id_validation/doc/RELEASE_NOTES.md b/email_id_validation/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..4c26ecb7e
--- /dev/null
+++ b/email_id_validation/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 20.10.2023
+#### Version 12.0.1.0.0
+#### ADD
+- Initial commit for Email Verification for Partner and Employee
diff --git a/email_id_validation/models/__init__.py b/email_id_validation/models/__init__.py
new file mode 100644
index 000000000..d872e0547
--- /dev/null
+++ b/email_id_validation/models/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+#
+# 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 hr_employee
+from . import res_partner
diff --git a/email_id_validation/models/hr_employee.py b/email_id_validation/models/hr_employee.py
new file mode 100644
index 000000000..7bcd644c8
--- /dev/null
+++ b/email_id_validation/models/hr_employee.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+#
+# 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 validate_email import validate_email
+from odoo import api, models, _
+from odoo.exceptions import ValidationError
+
+
+class HrEmployee(models.Model):
+ """Inherited module to execute a function when work_email
+ record is saved"""
+ _inherit = 'hr.employee'
+
+ @api.constrains('work_email')
+ def _check_work_email(self):
+ """
+ Check the work email is valid or not
+ """
+ if self.work_email:
+ is_valid = validate_email(self.work_email, check_mx=False,
+ verify=True, debug=False,
+ smtp_timeout=10)
+ if is_valid is not True:
+ raise ValidationError(_('You can use only valid email address.'
+ 'Email address "%s" is invalid '
+ 'or does not exist.') % self.work_email)
diff --git a/email_id_validation/models/res_partner.py b/email_id_validation/models/res_partner.py
new file mode 100644
index 000000000..7f519c968
--- /dev/null
+++ b/email_id_validation/models/res_partner.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+#
+# 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 validate_email import validate_email
+from odoo import api, models, _
+from odoo.exceptions import ValidationError
+
+
+class ResPartner(models.Model):
+ """Inherited module to execute a function when partner email
+ record is saved"""
+ _inherit = 'res.partner'
+
+ @api.constrains('email')
+ def _check_email(self):
+ """
+ Check the email is valid or not
+ """
+ if self.email:
+ is_valid = validate_email(self.email, check_mx=False, verify=True,
+ debug=False, smtp_timeout=10)
+ if is_valid is not True:
+ raise ValidationError(_('You can use only valid email address.'
+ 'Email address "%s" is invalid '
+ 'or does not exist.') % self.email)
diff --git a/email_id_validation/static/description/assets/icons/check.png b/email_id_validation/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/check.png differ
diff --git a/email_id_validation/static/description/assets/icons/chevron.png b/email_id_validation/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/chevron.png differ
diff --git a/email_id_validation/static/description/assets/icons/cogs.png b/email_id_validation/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/cogs.png differ
diff --git a/email_id_validation/static/description/assets/icons/consultation.png b/email_id_validation/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/consultation.png differ
diff --git a/email_id_validation/static/description/assets/icons/ecom-black.png b/email_id_validation/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/ecom-black.png differ
diff --git a/email_id_validation/static/description/assets/icons/education-black.png b/email_id_validation/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/education-black.png differ
diff --git a/email_id_validation/static/description/assets/icons/hotel-black.png b/email_id_validation/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/hotel-black.png differ
diff --git a/email_id_validation/static/description/assets/icons/license.png b/email_id_validation/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/license.png differ
diff --git a/email_id_validation/static/description/assets/icons/lifebuoy.png b/email_id_validation/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/lifebuoy.png differ
diff --git a/email_id_validation/static/description/assets/icons/logo.png b/email_id_validation/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/logo.png differ
diff --git a/email_id_validation/static/description/assets/icons/manufacturing-black.png b/email_id_validation/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/manufacturing-black.png differ
diff --git a/email_id_validation/static/description/assets/icons/pos-black.png b/email_id_validation/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/pos-black.png differ
diff --git a/email_id_validation/static/description/assets/icons/puzzle.png b/email_id_validation/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/puzzle.png differ
diff --git a/email_id_validation/static/description/assets/icons/restaurant-black.png b/email_id_validation/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/restaurant-black.png differ
diff --git a/email_id_validation/static/description/assets/icons/service-black.png b/email_id_validation/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/service-black.png differ
diff --git a/email_id_validation/static/description/assets/icons/trading-black.png b/email_id_validation/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/trading-black.png differ
diff --git a/email_id_validation/static/description/assets/icons/training.png b/email_id_validation/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/training.png differ
diff --git a/email_id_validation/static/description/assets/icons/update.png b/email_id_validation/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/update.png differ
diff --git a/email_id_validation/static/description/assets/icons/user.png b/email_id_validation/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/user.png differ
diff --git a/email_id_validation/static/description/assets/icons/wrench.png b/email_id_validation/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/email_id_validation/static/description/assets/icons/wrench.png differ
diff --git a/pos_multi_variant/static/description/images/order_types_in_pos.png b/email_id_validation/static/description/assets/modules/order_types_in_pos.png
similarity index 100%
rename from pos_multi_variant/static/description/images/order_types_in_pos.png
rename to email_id_validation/static/description/assets/modules/order_types_in_pos.png
diff --git a/pos_multi_variant/static/description/images/pos_combo_products.png b/email_id_validation/static/description/assets/modules/pos_combo_products.png
similarity index 100%
rename from pos_multi_variant/static/description/images/pos_combo_products.png
rename to email_id_validation/static/description/assets/modules/pos_combo_products.png
diff --git a/pos_multi_variant/static/description/images/pos_lot_expiry_warning.png b/email_id_validation/static/description/assets/modules/pos_lot_expiry_warning.png
similarity index 100%
rename from pos_multi_variant/static/description/images/pos_lot_expiry_warning.png
rename to email_id_validation/static/description/assets/modules/pos_lot_expiry_warning.png
diff --git a/pos_multi_variant/static/description/images/pos_product_addons.png b/email_id_validation/static/description/assets/modules/pos_product_addons.png
similarity index 100%
rename from pos_multi_variant/static/description/images/pos_product_addons.png
rename to email_id_validation/static/description/assets/modules/pos_product_addons.png
diff --git a/pos_multi_variant/static/description/images/pos_return.jpeg b/email_id_validation/static/description/assets/modules/pos_return.jpeg
similarity index 100%
rename from pos_multi_variant/static/description/images/pos_return.jpeg
rename to email_id_validation/static/description/assets/modules/pos_return.jpeg
diff --git a/pos_multi_variant/static/description/images/remove_orders.png b/email_id_validation/static/description/assets/modules/remove_orders.png
similarity index 100%
rename from pos_multi_variant/static/description/images/remove_orders.png
rename to email_id_validation/static/description/assets/modules/remove_orders.png
diff --git a/email_id_validation/static/description/assets/screenshots/hero.gif b/email_id_validation/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..dd965a70a
Binary files /dev/null and b/email_id_validation/static/description/assets/screenshots/hero.gif differ
diff --git a/email_id_validation/static/description/assets/screenshots/image_1.png b/email_id_validation/static/description/assets/screenshots/image_1.png
new file mode 100644
index 000000000..4850bbb58
Binary files /dev/null and b/email_id_validation/static/description/assets/screenshots/image_1.png differ
diff --git a/email_id_validation/static/description/assets/screenshots/image_2.png b/email_id_validation/static/description/assets/screenshots/image_2.png
new file mode 100644
index 000000000..302088340
Binary files /dev/null and b/email_id_validation/static/description/assets/screenshots/image_2.png differ
diff --git a/email_id_validation/static/description/banner.png b/email_id_validation/static/description/banner.png
new file mode 100644
index 000000000..58c5701ad
Binary files /dev/null and b/email_id_validation/static/description/banner.png differ
diff --git a/auto_fill/static/description/cybro_logo.png b/email_id_validation/static/description/cybro_logo.png
old mode 100755
new mode 100644
similarity index 100%
rename from auto_fill/static/description/cybro_logo.png
rename to email_id_validation/static/description/cybro_logo.png
diff --git a/email_id_validation/static/description/icon.png b/email_id_validation/static/description/icon.png
new file mode 100644
index 000000000..991a99c4d
Binary files /dev/null and b/email_id_validation/static/description/icon.png differ
diff --git a/email_id_validation/static/description/index.html b/email_id_validation/static/description/index.html
new file mode 100644
index 000000000..f366e6af4
--- /dev/null
+++ b/email_id_validation/static/description/index.html
@@ -0,0 +1,624 @@
+
+
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+
+
+
+
+
+
+
+
+
+ Email Verification for Partner and Employee
+
+ Verify the Email of Partner and Employee is Valid or Not
+
- Event management is a core module which can manage any type of events. The user can selectively download and install different service modules to extend the scope of this module. The new service will be automatically get attached to this core Event management module. It is different from Odoo's event module. Here you can manage different types of events and allocate services to different users.
- Note: Presently we have released the service 'Event Catering' under this module. New services are being developed by our team.
-
-
-
-
-
-
- Features
-
-
-
- Event order creation.
-
-
-
- Automatically creates service orders.
-
-
-
- Allocate the services to different users.
-
-
-
- Integrated with Accounting module.
-
-
-
- Simple Workflow.
-
-
-
- Attractive Design.
-
-
-
-
-
-
- Screenshots
-
-
-
- Event Dashboard
-
-
-
-
-
-
- Event Order View
-
-
-
-
-
-
- Event Order Form View
-
-
-
-
-
-
- Event Type
-
-
-
-
-
-
- Event Services
-
-
-
After installing a new service, you will get an option to select the service in the event order.
+ Event management is a core module which can manage any type of events. The user can selectively
+ download and install different service modules to extend the scope of this module. The new service
+ will be automatically get attached to this core Event management module. It is different from Odoo's
+ event module. Here you can manage different types of events and allocate services to different
+ users. Note: Presently we have released the service 'Event Catering' under this module. New services
+ are being developed by our team.
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Event order creation.
+
+
+
+
+
+
+
+
+
+
+
+ Automatically creates service orders.
+
+
+
+
+
+
+
+
+
+
+
+ Allocate the services to different users.
+
+
+
+
+
+
+
+
+
+
+
+ Integrated with Accounting module.
+
+
+
+
+
+
+
+
+
+
+
+ Simple Workflow.
+
+
+
+
+
+
+
+
+
+
+
+ Attractive Design.
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Event Dashboard
+
+ Screenshot of the event dashboard is shown below.
+
+
+
+
+
+
+ Event Order View
+
+ Screenshot of the Event Order View is shown below.
+
+
+
+
+
+
+ Event Order Form View
+
+ Screenshot of the Event Order View is shown below.
+
+
+
+
+
+
+ Event Type
+
+ You can create and edit event types.
+
+
+
+
+
+
+ Event Services
+
+ After installing a new service, you will get an option to select the service in the event order.
+ Creating an Event Order
+
\ No newline at end of file
diff --git a/field_timepicker/README.rst b/field_timepicker/README.rst
new file mode 100644
index 000000000..0769072be
--- /dev/null
+++ b/field_timepicker/README.rst
@@ -0,0 +1,65 @@
+.. 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
+
+=================
+Time Picker Field
+=================
+
+Time picker for fields, using Wickedpicker.
+
+Installation & Configuration
+============================
+
+After installing the module, you can use character fields for reading time input with the help of a time picker.
+ When you define the fields in xml, use 'widget="timepicker"' for those fields which you need to use as time fields.
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.odoo.com/documentation/user/12.0/legal/licenses/licenses.html)
+
+Known issues / Roadmap
+======================
+
+* ...
+
+Credits
+-------
+Developers: Version 12 - Mruthul @cybrosys,
+Contact: odoo@cybrosys.com
+
+
+Bug Tracker
+===========
+
+Contact odoo@cybrosys.com
+
+
+Contributors
+------------
+
+* Mruthul Raj
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+
+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: ``__
\ No newline at end of file
diff --git a/field_timepicker/__init__.py b/field_timepicker/__init__.py
new file mode 100644
index 000000000..2c6ee432e
--- /dev/null
+++ b/field_timepicker/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mruthul (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 .
+#
+###############################################################################
diff --git a/field_timepicker/__manifest__.py b/field_timepicker/__manifest__.py
new file mode 100644
index 000000000..b003e6dba
--- /dev/null
+++ b/field_timepicker/__manifest__.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mruthul (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': 'Time Picker Field',
+ 'version': '12.0.1.0.0',
+ 'summary': 'Time Picker Using Wickedpicker',
+ 'description': 'Time picker for the char fields',
+ 'category': 'Extra Tools',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'depends': ['base'],
+ 'website': 'https://www.cybrosys.com/',
+ 'data': [
+ 'views/templates.xml',
+ ],
+ 'qweb': ["static/src/xml/*.xml"],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/field_timepicker/doc/RELEASE_NOTES.md b/field_timepicker/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..28870ecf6
--- /dev/null
+++ b/field_timepicker/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 16.05.2023
+#### Version 12.0.1.0.0
+#### ADD
+Initial Commit Time Picker Field
\ No newline at end of file
diff --git a/field_timepicker/static/description/assets/icons/check.png b/field_timepicker/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/check.png differ
diff --git a/field_timepicker/static/description/assets/icons/chevron.png b/field_timepicker/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/chevron.png differ
diff --git a/field_timepicker/static/description/assets/icons/cogs.png b/field_timepicker/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/cogs.png differ
diff --git a/field_timepicker/static/description/assets/icons/consultation.png b/field_timepicker/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/consultation.png differ
diff --git a/field_timepicker/static/description/assets/icons/ecom-black.png b/field_timepicker/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/ecom-black.png differ
diff --git a/field_timepicker/static/description/assets/icons/education-black.png b/field_timepicker/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/education-black.png differ
diff --git a/field_timepicker/static/description/assets/icons/hotel-black.png b/field_timepicker/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/hotel-black.png differ
diff --git a/field_timepicker/static/description/assets/icons/license.png b/field_timepicker/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/license.png differ
diff --git a/field_timepicker/static/description/assets/icons/lifebuoy.png b/field_timepicker/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/lifebuoy.png differ
diff --git a/field_timepicker/static/description/assets/icons/logo.png b/field_timepicker/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/logo.png differ
diff --git a/field_timepicker/static/description/assets/icons/manufacturing-black.png b/field_timepicker/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/manufacturing-black.png differ
diff --git a/field_timepicker/static/description/assets/icons/pos-black.png b/field_timepicker/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/pos-black.png differ
diff --git a/field_timepicker/static/description/assets/icons/puzzle.png b/field_timepicker/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/puzzle.png differ
diff --git a/field_timepicker/static/description/assets/icons/restaurant-black.png b/field_timepicker/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/restaurant-black.png differ
diff --git a/field_timepicker/static/description/assets/icons/service-black.png b/field_timepicker/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/service-black.png differ
diff --git a/field_timepicker/static/description/assets/icons/trading-black.png b/field_timepicker/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/trading-black.png differ
diff --git a/field_timepicker/static/description/assets/icons/training.png b/field_timepicker/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/training.png differ
diff --git a/field_timepicker/static/description/assets/icons/update.png b/field_timepicker/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/update.png differ
diff --git a/field_timepicker/static/description/assets/icons/user.png b/field_timepicker/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/user.png differ
diff --git a/field_timepicker/static/description/assets/icons/wrench.png b/field_timepicker/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/field_timepicker/static/description/assets/icons/wrench.png differ
diff --git a/field_timepicker/static/description/assets/modules/1.png b/field_timepicker/static/description/assets/modules/1.png
new file mode 100644
index 000000000..4269b1cd9
Binary files /dev/null and b/field_timepicker/static/description/assets/modules/1.png differ
diff --git a/field_timepicker/static/description/assets/modules/2.png b/field_timepicker/static/description/assets/modules/2.png
new file mode 100644
index 000000000..34cee3e01
Binary files /dev/null and b/field_timepicker/static/description/assets/modules/2.png differ
diff --git a/field_timepicker/static/description/assets/modules/3.png b/field_timepicker/static/description/assets/modules/3.png
new file mode 100644
index 000000000..85bb9021f
Binary files /dev/null and b/field_timepicker/static/description/assets/modules/3.png differ
diff --git a/field_timepicker/static/description/assets/modules/4.png b/field_timepicker/static/description/assets/modules/4.png
new file mode 100644
index 000000000..3afc14722
Binary files /dev/null and b/field_timepicker/static/description/assets/modules/4.png differ
diff --git a/field_timepicker/static/description/assets/modules/5.png b/field_timepicker/static/description/assets/modules/5.png
new file mode 100644
index 000000000..cea66b05f
Binary files /dev/null and b/field_timepicker/static/description/assets/modules/5.png differ
diff --git a/field_timepicker/static/description/assets/modules/6.png b/field_timepicker/static/description/assets/modules/6.png
new file mode 100644
index 000000000..0c9bb377e
Binary files /dev/null and b/field_timepicker/static/description/assets/modules/6.png differ
diff --git a/field_timepicker/static/description/assets/screenshots/hero.png b/field_timepicker/static/description/assets/screenshots/hero.png
new file mode 100644
index 000000000..3a19ec583
Binary files /dev/null and b/field_timepicker/static/description/assets/screenshots/hero.png differ
diff --git a/field_timepicker/static/description/assets/screenshots/screenshot-1.png b/field_timepicker/static/description/assets/screenshots/screenshot-1.png
new file mode 100644
index 000000000..e37b6030a
Binary files /dev/null and b/field_timepicker/static/description/assets/screenshots/screenshot-1.png differ
diff --git a/field_timepicker/static/description/assets/screenshots/ss1.png b/field_timepicker/static/description/assets/screenshots/ss1.png
new file mode 100644
index 000000000..1811278bd
Binary files /dev/null and b/field_timepicker/static/description/assets/screenshots/ss1.png differ
diff --git a/field_timepicker/static/description/banner.png b/field_timepicker/static/description/banner.png
new file mode 100644
index 000000000..71ff750b3
Binary files /dev/null and b/field_timepicker/static/description/banner.png differ
diff --git a/odoo-debrand/static/description/cybro_logo.png b/field_timepicker/static/description/cybro_logo.png
similarity index 100%
rename from odoo-debrand/static/description/cybro_logo.png
rename to field_timepicker/static/description/cybro_logo.png
diff --git a/field_timepicker/static/description/icon.png b/field_timepicker/static/description/icon.png
new file mode 100644
index 000000000..31ef96a2f
Binary files /dev/null and b/field_timepicker/static/description/icon.png differ
diff --git a/field_timepicker/static/description/index.html b/field_timepicker/static/description/index.html
new file mode 100644
index 000000000..23894a870
--- /dev/null
+++ b/field_timepicker/static/description/index.html
@@ -0,0 +1,496 @@
+
+
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+
+
+
+
+
+
+
+
+
+ Time Picker Field
+
+ Add Time Picker Widget That Can Be Used With Character Type Fields In Odoo
+
+ The module allows the user to add time picker widget that can be used with character type fields in
+ Odoo
+ using the jQuery plugin 'Wickedpicker'.
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Time picker for character fields
+
+
+
+
+
+
+
+
+
+
+
+ Time picker in 24 hour format
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Time Picker Widget
+
+ Just add widget='timepicker' to character field.
+
+
+
+
+
+ Time Picker
+
+ You will get time picker like this.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
\ No newline at end of file
diff --git a/field_timepicker/static/description/picker.png b/field_timepicker/static/description/picker.png
new file mode 100644
index 000000000..4581d9b72
Binary files /dev/null and b/field_timepicker/static/description/picker.png differ
diff --git a/field_timepicker/static/description/time-picker-cybrosys-1.png b/field_timepicker/static/description/time-picker-cybrosys-1.png
new file mode 100644
index 000000000..e37b6030a
Binary files /dev/null and b/field_timepicker/static/description/time-picker-cybrosys-1.png differ
diff --git a/field_timepicker/static/src/js/time_widget.js b/field_timepicker/static/src/js/time_widget.js
new file mode 100644
index 000000000..2b93c0b5e
--- /dev/null
+++ b/field_timepicker/static/src/js/time_widget.js
@@ -0,0 +1,171 @@
+odoo.define('field_timepicker.timepicker', function(require) {
+ "use strict";
+
+ var basic_fields = require('web.basic_fields');
+ var field_registry = require('web.field_registry');
+ var global_show_time = null;
+ var FieldChar = require('web.basic_fields').FieldChar;
+ var Dialog = require('web.Dialog');
+
+ /**
+ * Custom field for time selection.
+ */
+ var FieldTimePicker = FieldChar.extend({
+ template: 'FieldTimePicker',
+ widget_class: 'oe_form_field_time',
+
+ /**
+ * Renders the field in read-only mode.
+ */
+ _renderReadonly: function() {
+ var show_value = this._formatValue(this.value);
+ this.$el.text(show_value);
+ global_show_time = show_value;
+ },
+
+ /**
+ * Gets the current value of the field.
+ *
+ * @returns {string} The field value.
+ */
+ _getValue: function() {
+ var $input = this.$el.find('input');
+ return $input.val();
+ },
+
+ /**
+ * Renders the field in edit mode.
+ */
+ _renderEdit: function() {
+ var show_value = this._formatValue(this.value);
+ this.$el.find('input')[0].value=show_value;
+ var self = this;
+ this.$el.on('click', '.timepickerg', function() {
+ self._onClickTimePicker();
+ });
+ },
+ _onClickTimePicker: function() {
+ /**
+ * Function to be executed when the "timepickerg" class is clicked.
+ * It renders the field as an editable timepicker widget if the formatType is "char".
+ */
+ if (this.formatType === "char") {
+ var $input = this.$el.find('input');
+ var options = {
+ twentyFour: true,
+ title: 'Timepicker',
+ showSeconds: true,
+ };
+ if (global_show_time) {
+ options['now'] = global_show_time;
+ }
+ $input.wickedpicker(options);
+ } else {
+ Dialog.alert(this, "Timepicker widget only works with 'Char' field type");
+ return false;
+ }
+ },
+ });
+
+ // Register the FieldTimePicker in the field registry
+ field_registry.add('timepicker', FieldTimePicker);
+
+ return {
+ FieldTimePicker: FieldTimePicker
+ };
+});
+
+odoo.define('field_timepicker.time_picker_add_exception', function(require) {
+ "use_strict";
+
+ var BasicModel = require('web.BasicModel');
+
+ BasicModel.include({
+ /**
+ * Override the applyChange method of BasicModel.
+ *
+ */
+ _applyChange: function(recordID, changes, options) {
+ var self = this;
+ var record = this.localData[recordID];
+ var field;
+ var defs = [];
+ options = options || {};
+ record._changes = record._changes || {};
+ if (!options.doNotSetDirty) {
+ record._isDirty = true;
+ }
+ var initialData = {};
+ this._visitChildren(record, function(elem) {
+ initialData[elem.id] = $.extend(true, {}, _.pick(elem, 'data', '_changes'));
+ });
+ // apply changes to local data
+ for (var fieldName in changes) {
+ field = record.fields[fieldName];
+ if (field.type === 'one2many' || field.type === 'many2many') {
+ defs.push(this._applyX2ManyChange(record, fieldName, changes[fieldName], options.viewType));
+ } else if (field.type === 'many2one' || field.type === 'reference') {
+ defs.push(this._applyX2OneChange(record, fieldName, changes[fieldName]));
+ } else {
+ record._changes[fieldName] = changes[fieldName];
+ }
+ }
+ if (options.notifyChange === false) {
+ return $.Deferred().resolve(_.keys(changes));
+ }
+ return $.when.apply($, defs).then(function() {
+ var onChangeFields = []; // the fields that have changed and that have an on_change
+ for (var fieldName in changes) {
+ field = record.fields[fieldName];
+ if (field.onChange) {
+ var isX2Many = field.type === 'one2many' || field.type === 'many2many';
+ if (!isX2Many || (self._isX2ManyValid(record._changes[fieldName] || record.data[fieldName]))) {
+ onChangeFields.push(fieldName);
+ }
+ }
+ }
+ var onchangeDef = $.Deferred();
+ if (onChangeFields.length) {
+ self._performOnChange(record, onChangeFields, options.viewType)
+ .then(function(result) {
+ delete record._warning;
+ onchangeDef.resolve(_.keys(changes).concat(Object.keys(result && result.value || {})));
+ }).fail(function() {
+ self._visitChildren(record, function(elem) {
+ _.extend(elem, initialData[elem.id]);
+ });
+ onchangeDef.resolve({});
+ });
+ } else {
+ onchangeDef = $.Deferred().resolve(_.keys(changes));
+ }
+ return onchangeDef.then(function(fieldNames) {
+ _.each(fieldNames, function(name) {
+ var excpet = {};
+ if (record && record['fieldsInfo'] && record['fieldsInfo']['form'] && record['fieldsInfo']['form'][name]) {
+ var curr_el = record['fieldsInfo']['form'][name];
+ if (curr_el['widget'] == 'timepicker') {
+ excpet[name] = true;
+ }
+ }
+ if (record._changes && record._changes[name] === record.data[name]) {
+ delete record._changes[name];
+ record._isDirty = !_.isEmpty(record._changes);
+ } else if (record._changes && record._changes[name] != record.data[name]) {
+ if (excpet[name] && excpet[name] == true) {
+ //delete record._changes[name];
+ fieldNames.splice(fieldNames.indexOf(name), 1);
+ record._isDirty = !_.isEmpty(fieldNames);
+ }
+ }
+ });
+ return self._fetchSpecialData(record).then(function(fieldNames2) {
+ // Return the names of the fields that changed (onchange or
+ // associated special data change)
+ return _.union(fieldNames, fieldNames2);
+ });
+ });
+ });
+ }
+ });
+});
\ No newline at end of file
diff --git a/field_timepicker/static/src/xml/timepicker.xml b/field_timepicker/static/src/xml/timepicker.xml
new file mode 100644
index 000000000..53b6d73a9
--- /dev/null
+++ b/field_timepicker/static/src/xml/timepicker.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/field_timepicker/static/wickedpicker/.gitignore b/field_timepicker/static/wickedpicker/.gitignore
new file mode 100644
index 000000000..4a42dee53
--- /dev/null
+++ b/field_timepicker/static/wickedpicker/.gitignore
@@ -0,0 +1,11 @@
+.sass-cache
+*.html
+jquery-1.11.3.min.js
+.idea
+sass
+jasmine
+spec
+node_modules
+node_module/*
+gulpfile.js
+package.json
diff --git a/field_timepicker/static/wickedpicker/LICENSE.md b/field_timepicker/static/wickedpicker/LICENSE.md
new file mode 100644
index 000000000..fc1cc60fa
--- /dev/null
+++ b/field_timepicker/static/wickedpicker/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2015-2016 Eric Gagnon http://ericjgagnon.github.io/wickedpicker/
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/field_timepicker/static/wickedpicker/README.md b/field_timepicker/static/wickedpicker/README.md
new file mode 100644
index 000000000..8c84570e4
--- /dev/null
+++ b/field_timepicker/static/wickedpicker/README.md
@@ -0,0 +1,79 @@
+# Wickedpicker
+
+## wickedpicker.js - A simple jQuery timepicker
+
+## Requirements
+
+* [jQuery](http://jquery.com/download/) (>= 1.9)
+
+## Installation
+```shell
+ $ bower install wickedpicker
+```
+
+## Usage
+
+#### In your HTML
+ ```html
+
+ ....
+
+ ....
+
+
+
+ ```
+
+#### In your JavaScript file
+ ```javascript
+ $('.timepicker').wickedpicker();
+ ```
+
+#### Options
+```javascript
+ var options = {
+ now: "12:35", //hh:mm 24 hour format only, defaults to current time
+ twentyFour: false, //Display 24 hour format, defaults to false
+ upArrow: 'wickedpicker__controls__control-up', //The up arrow class selector to use, for custom CSS
+ downArrow: 'wickedpicker__controls__control-down', //The down arrow class selector to use, for custom CSS
+ close: 'wickedpicker__close', //The close class selector to use, for custom CSS
+ hoverState: 'hover-state', //The hover state class to use, for custom CSS
+ title: 'Timepicker', //The Wickedpicker's title,
+ showSeconds: false, //Whether or not to show seconds,
+ timeSeparator: ' : ', // The string to put in between hours and minutes (and seconds)
+ secondsInterval: 1, //Change interval for seconds, defaults to 1,
+ minutesInterval: 1, //Change interval for minutes, defaults to 1
+ beforeShow: null, //A function to be called before the Wickedpicker is shown
+ afterShow: null, //A function to be called after the Wickedpicker is closed/hidden
+ show: null, //A function to be called when the Wickedpicker is shown
+ clearable: false, //Make the picker's input clearable (has clickable "x")
+ };
+ $('.timepicker').wickedpicker(options);
+```
+
+#### Methods
+
+'time' get the current time inside of the input element that has a wickedpicker attached to it.
+```javascript
+ $('.timepicker').wickedpicker('time');
+```
+
+ If multiple input fields have the same class and instantiate a wickedpicker then pass the index of the timepicker
+ you'd like to select
+ ```javascript
+ $('.timepicker').wickedpicker('time', 0);
+ ```
+
+#### Functionality
+ The Wickedpicker opens when the bound input is clicked, or focused on (try tabbing), and it can be closed by either
+ clicking the X, by clicking outside of it, or by pressing esc. The arrows icons increase or decrease their
+ associated time values or toggle the meridiem. The values can also be changed using the up and down keys when
+ focused on. To move to the next value just press the left or right arrow key.
+
+For more checkout
+[Wickedpicker gh-pages](http://ericjgagnon.github.io/wickedpicker/)
+
+## License
+
+ Copyright (c) 2015-2016 Eric Gagnon Licensed under the MIT license.
+
diff --git a/field_timepicker/static/wickedpicker/bower.json b/field_timepicker/static/wickedpicker/bower.json
new file mode 100644
index 000000000..2f29eeea7
--- /dev/null
+++ b/field_timepicker/static/wickedpicker/bower.json
@@ -0,0 +1,29 @@
+{
+ "name": "wickedpicker",
+ "version": "0.0.4",
+ "description": "A simple jQuery timepicker plugin.",
+ "main": [
+ "./dist/wickedpicker.min.js",
+ "./dist/wickedpicker.min.css"
+ ],
+ "authors": [
+ "Eric Gagnon",
+ "Ruben Seyferth"
+ ],
+ "moduleType": "globals",
+ "license": "MIT",
+ "keywords": [
+ "jQuery",
+ "timepicker",
+ "wickedpicker"
+ ],
+ "homepage": "http://ericjgagnon.github.io/wickedpicker/",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/ericjgagnon/wickedpicker.git"
+ },
+ "dependencies": {
+ "jquery": ">= 1.9.0"
+ },
+ "private": false
+}
diff --git a/field_timepicker/static/wickedpicker/fonts/fontello.eot b/field_timepicker/static/wickedpicker/fonts/fontello.eot
new file mode 100644
index 000000000..f9d3a8aea
Binary files /dev/null and b/field_timepicker/static/wickedpicker/fonts/fontello.eot differ
diff --git a/field_timepicker/static/wickedpicker/fonts/fontello.svg b/field_timepicker/static/wickedpicker/fonts/fontello.svg
new file mode 100644
index 000000000..930a6cc3f
--- /dev/null
+++ b/field_timepicker/static/wickedpicker/fonts/fontello.svg
@@ -0,0 +1,14 @@
+
+
+
\ No newline at end of file
diff --git a/field_timepicker/static/wickedpicker/fonts/fontello.ttf b/field_timepicker/static/wickedpicker/fonts/fontello.ttf
new file mode 100644
index 000000000..2877820b1
Binary files /dev/null and b/field_timepicker/static/wickedpicker/fonts/fontello.ttf differ
diff --git a/field_timepicker/static/wickedpicker/fonts/fontello.woff b/field_timepicker/static/wickedpicker/fonts/fontello.woff
new file mode 100644
index 000000000..35636f7f9
Binary files /dev/null and b/field_timepicker/static/wickedpicker/fonts/fontello.woff differ
diff --git a/field_timepicker/static/wickedpicker/src/wickedpicker.js b/field_timepicker/static/wickedpicker/src/wickedpicker.js
new file mode 100644
index 000000000..e0ee537fa
--- /dev/null
+++ b/field_timepicker/static/wickedpicker/src/wickedpicker.js
@@ -0,0 +1,624 @@
+/**
+ * wickedpicker v0.4.1 - A simple jQuery timepicker.
+ * Copyright (c) 2015-2016 Eric Gagnon - http://github.com/wickedRidge/wickedpicker
+ * License: MIT
+ */
+
+(function ($, window, document) {
+
+ "use strict";
+
+ if (typeof String.prototype.endsWith != 'function') {
+ /*
+ * Checks if this string end ends with another string
+ *
+ * @param {string} the string to be checked
+ *
+ * @return {bool}
+ */
+ String.prototype.endsWith = function (string) {
+ return string.length > 0 && this.substring(this.length - string.length, this.length) === string;
+ }
+ }
+
+ /*
+ * Returns if the user agent is mobile
+ *
+ * @return {bool}
+ */
+ var isMobile = function () {
+ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+ };
+
+ var today = new Date();
+
+ var pluginName = "wickedpicker",
+ defaults = {
+ now: today.getHours() + ':' + today.getMinutes(),
+ twentyFour: false,
+ upArrow: 'wickedpicker__controls__control-up',
+ downArrow: 'wickedpicker__controls__control-down',
+ close: 'wickedpicker__close',
+ hoverState: 'hover-state',
+ title: 'Timepicker',
+ showSeconds: false,
+ timeSeparator: ' : ',
+ secondsInterval: 1,
+ minutesInterval: 1,
+ beforeShow: null,
+ afterShow: null,
+ show: null,
+ clearable: false,
+ closeOnClickOutside: true,
+ onClickOutside: function() {},
+ };
+
+ /*
+ * @param {object} The input object the timepicker is attached to.
+ * @param {object} The object containing options
+ */
+ function Wickedpicker(element, options) {
+ this.element = $(element);
+ this.options = $.extend({}, defaults, options);
+
+ this.element.addClass('hasWickedpicker');
+ this.element.attr('onkeypress', 'return false;');
+ this.element.attr('aria-showingpicker', 'false');
+ this.createPicker();
+ this.timepicker = $('.wickedpicker');
+ this.up = $('.' + this.options.upArrow.split(/\s+/).join('.'));
+ this.down = $('.' + this.options.downArrow.split(/\s+/).join('.'));
+ this.separator = $('.wickedpicker__controls__control--separator');
+ this.hoursElem = $('.wickedpicker__controls__control--hours');
+ this.minutesElem = $('.wickedpicker__controls__control--minutes');
+ this.secondsElem = $('.wickedpicker__controls__control--seconds');
+ this.meridiemElem = $('.wickedpicker__controls__control--meridiem');
+ this.close = $('.' + this.options.close.split(/\s+/).join('.'));
+
+ //Create a new Date object based on the default or passing in now value
+ var time = this.timeArrayFromString(this.options.now);
+ this.options.now = new Date(today.getFullYear(), today.getMonth(), today.getDate(), time[0], time[1], time[2]);
+ this.selectedHour = this.parseHours(this.options.now.getHours());
+ this.selectedMin = this.parseSecMin(this.options.now.getMinutes());
+ this.selectedSec = this.parseSecMin(this.options.now.getSeconds());
+ this.selectedMeridiem = this.parseMeridiem(this.options.now.getHours());
+ this.setHoverState();
+ this.attach(element);
+ this.setText(element);
+ }
+
+ $.extend(Wickedpicker.prototype, {
+
+ /*
+ * Show given input's timepicker
+ *
+ * @param {object} The input being clicked
+ */
+ showPicker: function (element) {
+ //If there is a beforeShow function, then call it with the input calling the timepicker and the
+ // timepicker itself
+ if (typeof this.options.beforeShow === 'function') {
+ this.options.beforeShow(element, this.timepicker);
+ }
+ var timepickerPos = $(element).offset();
+
+ $(element).attr({'aria-showingpicker': 'true', 'tabindex': -1});
+ this.setText(element);
+ this.showHideMeridiemControl();
+ if (this.getText(element) !== this.getTime()) {
+
+ // Check meridiem
+ var text = this.getText(element);
+ var re = /\s[ap]m$/i;
+ var meridiem = re.test(text) ? text.substr(-2, 2) : null;
+ var inputTime = text.replace(re, '').split(this.options.timeSeparator);
+ var newTime = {};
+ newTime.hours = inputTime[0];
+ newTime.minutes = inputTime[1];
+ newTime.meridiem = meridiem;
+ if (this.options.showSeconds) {
+ newTime.seconds = inputTime[2];
+ }
+ this.setTime(newTime);
+ }
+ this.timepicker.css({
+ 'z-index': this.element.css('z-index') + 1,
+ position: 'absolute',
+ left: timepickerPos.left,
+ top: timepickerPos.top + $(element)[0].offsetHeight
+ }).show();
+ //If there is a show function, then call it with the input calling the timepicker and the
+ // timepicker itself
+ if (typeof this.options.show === 'function') {
+ this.options.show(element, this.timepicker);
+ }
+
+ this.handleTimeAdjustments(element);
+ },
+
+ /*
+ * Hides the timepicker that is currently shown if it is not part of the timepicker
+ *
+ * @param {Object} The DOM object being clicked on the page
+ *
+ * BeinnLora: added trigger function to call on closing/hiding timepicker.
+ */
+ hideTimepicker: function (element) {
+ this.timepicker.hide();
+ if (typeof this.options.afterShow === 'function') {
+ this.options.afterShow(element, this.timepicker);
+ }
+ var pickerHidden = {
+ start: function () {
+ var setShowPickerFalse = $.Deferred();
+ $('[aria-showingpicker="true"]').attr('aria-showingpicker', 'false');
+ return setShowPickerFalse.promise();
+ }
+ };
+
+ function setTabIndex(index) {
+ setTimeout(function () {
+ $('[aria-showingpicker="false"]').attr('tabindex', index);
+ }, 400);
+ }
+
+ pickerHidden.start().then(setTabIndex(0));
+ },
+
+ /*
+ * Create a new timepicker. A single timepicker per page
+ */
+ createPicker: function () {
+ if ($('.wickedpicker').length === 0) {
+ var picker = '
' + this.options.title + '
00
:
00
';
+ if (this.options.showSeconds) {
+ picker += '
:
00
';
+ }
+ picker += '
AM
';
+ $('body').append(picker);
+ this.attachKeyboardEvents();
+ }
+ },
+
+ /*
+ * Hides the meridiem control if this timepicker is a 24 hour clock
+ */
+ showHideMeridiemControl: function () {
+ if (this.options.twentyFour === false) {
+ $(this.meridiemElem).parent().show();
+ }
+ else {
+ $(this.meridiemElem).parent().hide();
+ }
+ },
+
+ /*
+ * Hides the seconds control if this timepicker has showSeconds set to true
+ */
+ showHideSecondsControl: function () {
+ if (this.options.showSeconds) {
+ $(this.secondsElem).parent().show();
+ }
+ else {
+ $(this.secondsElem).parent().hide();
+ }
+ },
+
+ /*
+ * Bind the click events to the input
+ *
+ * @param {object} The input element
+ */
+ attach: function (element) {
+ var self = this;
+
+ if (this.options.clearable) {
+ self.makePickerInputClearable(element);
+ }
+
+ $(element).attr('tabindex', 0);
+ $(element).on('click focus', function (event) {
+ //Prevent multiple firings
+ if ($(self.timepicker).is(':hidden')) {
+ self.showPicker($(this));
+ window.lastTimePickerControl = $(this); //Put the reference on this timepicker into global scope for unsing that in afterShow function
+ $(self.hoursElem).focus();
+ }
+ });
+
+
+ //Handle click events for closing Wickedpicker
+ var clickHandler = function (event) { //TODO: Fix double firing
+ //Only fire the hide event when you have to
+ if ($(self.timepicker).is(':visible')) {
+ //Clicking the X
+ if ($(event.target).is(self.close)) {
+ self.hideTimepicker(window.lastTimePickerControl);
+ } else if ($(event.target).closest(self.timepicker).length || $(event.target).closest($('.hasWickedpicker')).length) { //Clicking the Wickedpicker or one of it's inputs
+ event.stopPropagation();
+ } else { //Everything else
+ if (typeof self.options.onClickOutside === 'function') {
+ self.options.onClickOutside();
+ }
+ else {
+ console.warn("Type of onClickOutside must be a function");
+ }
+
+ if (!self.options.closeOnClickOutside) {
+ return;
+ }
+ self.hideTimepicker(window.lastTimePickerControl);
+ }
+ window.lastTimePickerControl = null;
+ }
+ };
+ $(document).off('click', clickHandler).on('click', clickHandler);
+ },
+
+ /**
+ * Added keyboard functionality to improve usabil
+ */
+ attachKeyboardEvents: function () {
+ $(document).on('keydown', $.proxy(function (event) {
+ switch (event.keyCode) {
+ case 9:
+ if (event.target.className !== 'hasWickedpicker') {
+ $(this.close).trigger('click');
+ }
+ break;
+ case 27:
+ $(this.close).trigger('click');
+ break;
+ case 37: //Left arrow
+ if (event.target.className !== this.hoursElem[0].className) {
+ $(event.target).parent().prevAll('li').not(this.separator.selector).first().children()[1].focus();
+ } else {
+ $(event.target).parent().siblings(':last').children()[1].focus();
+ }
+ break;
+ case 39: //Right arrow
+ if (event.target.className !== this.meridiemElem[0].className) {
+ $(event.target).parent().nextAll('li').not(this.separator.selector).first().children()[1].focus();
+ } else {
+ $(event.target).parent().siblings(':first').children()[1].focus();
+ }
+ break;
+ case 38: //Up arrow
+ $(':focus').prev().trigger('click');
+ break;
+ case 40: //Down arrow
+ $(':focus').next().trigger('click');
+ break;
+ default:
+ break;
+ }
+ }, this));
+ },
+
+ /*
+ * Set the time on the timepicker
+ *
+ * @param {object} The date being set
+ */
+ setTime: function (time) {
+ this.setHours(time.hours);
+ this.setMinutes(time.minutes);
+ this.setMeridiem(time.meridiem);
+ if (this.options.showSeconds) {
+ this.setSeconds(time.seconds);
+ }
+ },
+
+ /*
+ * Get the time from the timepicker
+ */
+ getTime: function () {
+ return [this.formatTime(this.getHours(), this.getMinutes(), this.getMeridiem(), this.getSeconds())];
+ },
+
+ /*
+ * Set the timpicker's hour(s) value
+ *
+ * @param {string} hours
+ */
+ setHours: function (hours) {
+ var hour = new Date();
+ hour.setHours(hours);
+ var hoursText = this.parseHours(hour.getHours());
+ this.hoursElem.text(hoursText);
+ this.selectedHour = hoursText;
+ },
+
+ /*
+ * Get the hour(s) value from the timepicker
+ *
+ * @return {integer}
+ */
+ getHours: function () {
+ var hours = new Date();
+ hours.setHours(this.hoursElem.text());
+ return hours.getHours();
+ },
+
+ /*
+ * Returns the correct hour value based on the type of clock, 12 or 24 hour
+ *
+ * @param {integer} The hours value before parsing
+ *
+ * @return {string|integer}
+ */
+ parseHours: function (hours) {
+ return (this.options.twentyFour === false) ? ((hours + 11) % 12) + 1 : (hours < 10) ? '0' + hours : hours;
+ },
+
+ /*
+ * Sets the timpicker's minutes value
+ *
+ * @param {string} minutes
+ */
+ setMinutes: function (minutes) {
+ var minute = new Date();
+ minute.setMinutes(minutes);
+ var minutesText = minute.getMinutes();
+ var min = this.parseSecMin(minutesText);
+ this.minutesElem.text(min);
+ this.selectedMin = min;
+ },
+
+ /*
+ * Get the minutes value from the timepicker
+ *
+ * @return {integer}
+ */
+ getMinutes: function () {
+ var minutes = new Date();
+ minutes.setMinutes(this.minutesElem.text());
+ return minutes.getMinutes();
+ },
+
+
+ /*
+ * Return a human-readable minutes/seconds value
+ *
+ * @param {string} value seconds or minutes
+ *
+ * @return {string|integer}
+ */
+ parseSecMin: function (value) {
+ return ((value < 10) ? '0' : '') + value;
+ },
+
+ /*
+ * Set the timepicker's meridiem value, AM or PM
+ *
+ * @param {string} The new meridiem
+ */
+ setMeridiem: function (inputMeridiem) {
+ var newMeridiem = '';
+ if (inputMeridiem === undefined) {
+ var meridiem = this.getMeridiem();
+ newMeridiem = (meridiem === 'PM') ? 'AM' : 'PM';
+ } else {
+ newMeridiem = inputMeridiem;
+ }
+ this.meridiemElem.text(newMeridiem);
+ this.selectedMeridiem = newMeridiem;
+ },
+
+ /*
+ * Get the timepicker's meridiem value, AM or PM
+ *
+ * @return {string}
+ */
+ getMeridiem: function () {
+ return this.meridiemElem.text();
+ },
+
+ /*
+ * Set the timepicker's seconds value
+ *
+ * @param {string} seconds
+ */
+ setSeconds: function (seconds) {
+ var second = new Date();
+ second.setSeconds(seconds);
+ var secondsText = second.getSeconds();
+ var sec = this.parseSecMin(secondsText);
+ this.secondsElem.text(sec);
+ this.selectedSec = sec;
+ },
+
+ /*
+ * Get the timepicker's seconds value
+ *
+ * return {string}
+ */
+ getSeconds: function () {
+ var seconds = new Date();
+ seconds.setSeconds(this.secondsElem.text());
+ return seconds.getSeconds();
+ },
+
+ /*
+ * Get the correct meridiem based on the hours given
+ *
+ * @param {string|integer} hours
+ *
+ * @return {string}
+ */
+ parseMeridiem: function (hours) {
+ return (hours > 11) ? 'PM' : 'AM';
+ },
+
+ /*
+ * Handles time incrementing and decrementing and passes
+ * the operator, '+' or '-', the input to be set after the change
+ * and the current arrow clicked, to decipher if hours, ninutes, or meridiem.
+ *
+ * @param {object} The input element
+ */
+ handleTimeAdjustments: function (element) {
+ var timeOut = 0;
+ //Click and click and hold timepicker incrementer and decrementer
+ $(this.up).add(this.down).off('mousedown click touchstart').on('mousedown click', {
+ 'Wickedpicker': this,
+ 'input': element
+ }, function (event) {
+ if(event.which!=1) return false;
+ var operator = (this.className.indexOf('up') > -1) ? '+' : '-';
+ var passedData = event.data;
+ if (event.type == 'mousedown') {
+ timeOut = setInterval($.proxy(function (args) {
+ args.Wickedpicker.changeValue(operator, args.input, this);
+ }, this, {'Wickedpicker': passedData.Wickedpicker, 'input': passedData.input}), 200);
+ } else {
+ passedData.Wickedpicker.changeValue(operator, passedData.input, this);
+ }
+ }).bind('mouseup touchend', function () {
+ clearInterval(timeOut);
+ });
+ },
+
+ /*
+ * Change the timepicker's time base on what is clicked
+ *
+ * @param {string} The + or - operator
+ * @param {object} The timepicker's associated input to be set post change
+ * @param {object} The DOM arrow object clicked, determines if it is hours,
+ * minutes, or meridiem base on the operator and its siblings
+ */
+ changeValue: function (operator, input, clicked) {
+ var target = (operator === '+') ? clicked.nextSibling : clicked.previousSibling;
+ var targetClass = $(target).attr('class');
+ if (targetClass.endsWith('hours')) {
+ this.setHours(eval(this.getHours() + operator + 1));
+ } else if (targetClass.endsWith('minutes')) {
+ this.setMinutes(eval(this.getMinutes() + operator + this.options.minutesInterval));
+ } else if (targetClass.endsWith('seconds')) {
+ this.setSeconds(eval(this.getSeconds() + operator + this.options.secondsInterval));
+ } else {
+ this.setMeridiem();
+ }
+ this.setText(input);
+ },
+
+
+ /*
+ * Sets the give input's text to the current timepicker's time
+ *
+ * @param {object} The input element
+ */
+ setText: function (input) {
+ $(input).val(this.formatTime(this.selectedHour, this.selectedMin, this.selectedMeridiem, this.selectedSec)).change();
+ },
+
+ /*
+ * Get the given input's value
+ *
+ * @param {object} The input element
+ *
+ * @return {string}
+ */
+ getText: function (input) {
+ return $(input).val();
+ },
+
+ /*
+ * Returns the correct time format as a string
+ *
+ * @param {string} hour
+ * @param {string} minutes
+ * @param {string} meridiem
+ *
+ * @return {string}
+ */
+ formatTime: function (hour, min, meridiem, seconds) {
+ var formattedTime = hour + this.options.timeSeparator + min;
+ if (this.options.showSeconds) {
+ formattedTime += this.options.timeSeparator + seconds;
+ }
+ if (this.options.twentyFour === false) {
+ formattedTime += ' ' + meridiem;
+ }
+ return formattedTime;
+ },
+
+ /**
+ * Apply the hover class to the arrows and close icon fonts
+ */
+ setHoverState: function () {
+ var self = this;
+ if (!isMobile()) {
+ $(this.up).add(this.down).add(this.close).hover(function () {
+ $(this).toggleClass(self.options.hoverState);
+ });
+ }
+ },
+
+ /**
+ * Wrapping the given input field with the clearable container
+ * , add a span that will contain the x, and bind the clear
+ * input event to the span
+ *
+ * @param input
+ */
+ makePickerInputClearable: function(input) {
+ $(input).wrap('').after('×');
+
+ //When the x is clicked, clear its sibling input field
+ $('[data-clear-picker]').on('click', function(event) {
+ $(this).siblings('.hasWickedpicker').val('');
+ });
+ },
+
+ /**
+ * Convert the options time string format
+ * to an array
+ *
+ * returns => [hours, minutes, seconds]
+ *
+ * @param stringTime
+ * @returns {*}
+ */
+ timeArrayFromString: function (stringTime) {
+ if (stringTime.length) {
+ var time = stringTime.split(':');
+ time[2] = (time.length < 3) ? '00' : time[2];
+ return time;
+ }
+ return false;
+ },
+
+ //public functions
+ /*
+ * Returns the requested input element's value
+ */
+ _time: function () {
+ var inputValue = $(this.element).val();
+ return (inputValue === '') ? this.formatTime(this.selectedHour, this.selectedMin, this.selectedMeridiem, this.selectedSec) : inputValue;
+ },
+ _hide: function() {
+ this.hideTimepicker(this.element);
+ }
+ });
+
+ //optional index if multiple inputs share the same class
+ $.fn[pluginName] = function (options, index) {
+ if (!$.isFunction(Wickedpicker.prototype['_' + options])) {
+ return this.each(function () {
+ if (!$.data(this, "plugin_" + pluginName)) {
+ $.data(this, "plugin_" + pluginName, new Wickedpicker(this, options));
+ }
+ });
+ }
+ else if ($(this).hasClass('hasWickedpicker')) {
+ if (index !== undefined) {
+ return $.data($(this)[index], 'plugin_' + pluginName)['_' + options]();
+ }
+ else {
+ return $.data($(this)[0], 'plugin_' + pluginName)['_' + options]();
+ }
+ }
+ };
+
+})(jQuery, window, document);
diff --git a/field_timepicker/static/wickedpicker/stylesheets/wickedpicker.css b/field_timepicker/static/wickedpicker/stylesheets/wickedpicker.css
new file mode 100644
index 000000000..d2a6ab27b
--- /dev/null
+++ b/field_timepicker/static/wickedpicker/stylesheets/wickedpicker.css
@@ -0,0 +1,90 @@
+.wickedpicker {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ box-shadow: 0 0 0 1px rgba(14, 41, 57, 0.12), 0 2px 5px rgba(14, 41, 57, 0.44), inset 0 -1px 2px rgba(14, 41, 57, 0.15);
+ background: #fefefe;
+ margin: 0 auto;
+ border-radius: 0.1px;
+ width: 270px;
+ height: 130px;
+ font-size: 14px;
+ display: none; }
+ .wickedpicker__title {
+ background-image: -webkit-linear-gradient(top, #ffffff 0%, #f2f2f2 100%);
+ background-image: linear-gradient(to bottom, #ffffff 0%, #f2f2f2 100%);
+ position: relative;
+ background: #f2f2f2;
+ margin: 0 auto;
+ border-bottom: 1px solid #e5e5e5;
+ padding: 12px 11px 10px 15px;
+ color: #4C4C4C;
+ font-size: inherit; }
+ .wickedpicker__close {
+ -webkit-transform: translateY(-25%);
+ -moz-transform: translateY(-25%);
+ -ms-transform: translateY(-25%);
+ -o-transform: translateY(-25%);
+ transform: translateY(-25%);
+ position: absolute;
+ top: 25%;
+ right: 10px;
+ color: #34495e;
+ cursor: pointer; }
+ .wickedpicker__close:before {
+ content: '\00d7'; }
+ .wickedpicker__controls {
+ padding: 10px 0;
+ line-height: normal;
+ margin: 0; }
+ .wickedpicker__controls__control, .wickedpicker__controls__control--separator {
+ vertical-align: middle;
+ display: inline-block;
+ font-size: inherit;
+ margin: 0 auto;
+ width: 35px;
+ letter-spacing: 1.3px; }
+ .wickedpicker__controls__control-up, .wickedpicker__controls__control-down {
+ color: #34495e;
+ position: relative;
+ display: block;
+ margin: 3px auto;
+ font-size: 18px;
+ cursor: pointer; }
+ .wickedpicker__controls__control-up:before {
+ content: '\e800'; }
+ .wickedpicker__controls__control-down:after {
+ content: '\e801'; }
+ .wickedpicker__controls__control--separator {
+ width: 5px; }
+
+.text-center, .wickedpicker__title, .wickedpicker__controls, .wickedpicker__controls__control, .wickedpicker__controls__control--separator, .wickedpicker__controls__control-up, .wickedpicker__controls__control-down {
+ text-align: center; }
+
+.hover-state {
+ color: #3498db; }
+
+@font-face {
+ font-family: 'fontello';
+ src: url("../fonts/fontello.eot?52602240");
+ src: url("../fonts/fontello.eot?52602240#iefix") format("embedded-opentype"), url("../fonts/fontello.woff?52602240") format("woff"), url("../fonts/fontello.ttf?52602240") format("truetype"), url("../fonts/fontello.svg?52602240#fontello") format("svg");
+ font-weight: normal;
+ font-style: normal; }
+
+.fontello:before, .wickedpicker__controls__control-up:before, .fontello-after:after, .wickedpicker__controls__control-down:after {
+ font-family: 'fontello';
+ font-style: normal;
+ font-weight: normal;
+ speak: none;
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1em;
+ margin-right: .2em;
+ text-align: center;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1em;
+ margin-left: .2em;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; }
diff --git a/field_timepicker/views/templates.xml b/field_timepicker/views/templates.xml
new file mode 100644
index 000000000..76374848f
--- /dev/null
+++ b/field_timepicker/views/templates.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/first_last_name/static/description/assets/icons/check.png b/first_last_name/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/first_last_name/static/description/assets/icons/check.png differ
diff --git a/first_last_name/static/description/assets/icons/chevron.png b/first_last_name/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/first_last_name/static/description/assets/icons/chevron.png differ
diff --git a/first_last_name/static/description/assets/icons/cogs.png b/first_last_name/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/first_last_name/static/description/assets/icons/cogs.png differ
diff --git a/first_last_name/static/description/assets/icons/consultation.png b/first_last_name/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/first_last_name/static/description/assets/icons/consultation.png differ
diff --git a/first_last_name/static/description/assets/icons/ecom-black.png b/first_last_name/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/first_last_name/static/description/assets/icons/ecom-black.png differ
diff --git a/first_last_name/static/description/assets/icons/education-black.png b/first_last_name/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/first_last_name/static/description/assets/icons/education-black.png differ
diff --git a/first_last_name/static/description/assets/icons/hotel-black.png b/first_last_name/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/first_last_name/static/description/assets/icons/hotel-black.png differ
diff --git a/first_last_name/static/description/assets/icons/license.png b/first_last_name/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/first_last_name/static/description/assets/icons/license.png differ
diff --git a/first_last_name/static/description/assets/icons/lifebuoy.png b/first_last_name/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/first_last_name/static/description/assets/icons/lifebuoy.png differ
diff --git a/first_last_name/static/description/assets/icons/logo.png b/first_last_name/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/first_last_name/static/description/assets/icons/logo.png differ
diff --git a/first_last_name/static/description/assets/icons/manufacturing-black.png b/first_last_name/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/first_last_name/static/description/assets/icons/manufacturing-black.png differ
diff --git a/first_last_name/static/description/assets/icons/pos-black.png b/first_last_name/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/first_last_name/static/description/assets/icons/pos-black.png differ
diff --git a/first_last_name/static/description/assets/icons/puzzle.png b/first_last_name/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/first_last_name/static/description/assets/icons/puzzle.png differ
diff --git a/first_last_name/static/description/assets/icons/restaurant-black.png b/first_last_name/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/first_last_name/static/description/assets/icons/restaurant-black.png differ
diff --git a/first_last_name/static/description/assets/icons/service-black.png b/first_last_name/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/first_last_name/static/description/assets/icons/service-black.png differ
diff --git a/first_last_name/static/description/assets/icons/trading-black.png b/first_last_name/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/first_last_name/static/description/assets/icons/trading-black.png differ
diff --git a/first_last_name/static/description/assets/icons/training.png b/first_last_name/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/first_last_name/static/description/assets/icons/training.png differ
diff --git a/first_last_name/static/description/assets/icons/update.png b/first_last_name/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/first_last_name/static/description/assets/icons/update.png differ
diff --git a/first_last_name/static/description/assets/icons/user.png b/first_last_name/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/first_last_name/static/description/assets/icons/user.png differ
diff --git a/first_last_name/static/description/assets/icons/wrench.png b/first_last_name/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/first_last_name/static/description/assets/icons/wrench.png differ
diff --git a/first_last_name/static/description/assets/modules/approval_image.png b/first_last_name/static/description/assets/modules/approval_image.png
new file mode 100644
index 000000000..84fe94e80
Binary files /dev/null and b/first_last_name/static/description/assets/modules/approval_image.png differ
diff --git a/first_last_name/static/description/assets/modules/budget_image.png b/first_last_name/static/description/assets/modules/budget_image.png
new file mode 100644
index 000000000..fe6aa6fe4
Binary files /dev/null and b/first_last_name/static/description/assets/modules/budget_image.png differ
diff --git a/first_last_name/static/description/assets/modules/export_image.png b/first_last_name/static/description/assets/modules/export_image.png
new file mode 100644
index 000000000..4e4ea0e51
Binary files /dev/null and b/first_last_name/static/description/assets/modules/export_image.png differ
diff --git a/first_last_name/static/description/assets/modules/magento_image.png b/first_last_name/static/description/assets/modules/magento_image.png
new file mode 100644
index 000000000..39de0820f
Binary files /dev/null and b/first_last_name/static/description/assets/modules/magento_image.png differ
diff --git a/first_last_name/static/description/assets/modules/pos_image.png b/first_last_name/static/description/assets/modules/pos_image.png
new file mode 100644
index 000000000..c5932894b
Binary files /dev/null and b/first_last_name/static/description/assets/modules/pos_image.png differ
diff --git a/first_last_name/static/description/assets/modules/shopify_image.png b/first_last_name/static/description/assets/modules/shopify_image.png
new file mode 100644
index 000000000..c6d92c16d
Binary files /dev/null and b/first_last_name/static/description/assets/modules/shopify_image.png differ
diff --git a/first_last_name/static/description/assets/screenshots/hero.png b/first_last_name/static/description/assets/screenshots/hero.png
new file mode 100644
index 000000000..b767936be
Binary files /dev/null and b/first_last_name/static/description/assets/screenshots/hero.png differ
diff --git a/first_last_name/static/description/assets/screenshots/partner-first-last-name-cybrosys.png b/first_last_name/static/description/assets/screenshots/partner-first-last-name-cybrosys.png
new file mode 100644
index 000000000..e7326850a
Binary files /dev/null and b/first_last_name/static/description/assets/screenshots/partner-first-last-name-cybrosys.png differ
diff --git a/first_last_name/static/description/index.html b/first_last_name/static/description/index.html
index a68ad70f7..ac18575fe 100644
--- a/first_last_name/static/description/index.html
+++ b/first_last_name/static/description/index.html
@@ -1,335 +1,574 @@
-
-
- Gatepass modules helps to generate gatepass tickets including the details of the vehicle,driver and the information about the
- company which the vehicle belongs to with entry date and time.And the information of the products in the delivery order.
-
-
- Configuration
-
-
- No additional configuration required
-
-
-
-
-
-
-
- Features
-
-
-
- Creating the details of Gatepass with details of Vehicle number,Driver's name,Contact information of the driver,
- company of the driver
-
-
-
- Information about the products in the delivery order also provided in the ticket.
- This can be enable from the "Gatepass details'" form
-
-
-
- Printing Gatepass ticket
-
-
-
-
-
-
-
- Screenshots
-
-
-
- Here we can fill the details regarding to the Gate Pass
-
-
-
-
-
-
- From the Print menu we can print the Gate Pass Ticket
-
+ Gate pass modules helps to generate gatepass tickets including the details of the vehicle,driver and
+ the information about the company which the vehicle belongs to with entry date and time.And the
+ information of the products in the delivery order.
+
+
+
+
+
+
+
+ Configuration
+
+
+
+
+
+ No additional configurations required.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Creating the details of Gatepass with details of Vehicle number,Driver's name,Contact
+ information of the driver, company of the driver
+
+
+
+
+
+
+
+
+
+
+ Information about the products in the delivery order also provided in the ticket. This can be
+ enable from the "Gatepass details" form.
+
+
+
+
+
+
+
+
+
+
+ Printing Gatepass ticket.
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Fill details regarding gate pass
+
+ Here we can fill the details regarding to the Gate Pass.
+
+
+
+
+
+
+ Print Gate Pass Ticket
+
+ From the Print menu we can print the Gate Pass Ticket.
+
+ The module allows the POS managers to control the 'Discount' and 'Product
+ Price'in each 'POS'. The manager can disable the 'Discount' and 'Price' option in any
+ POS such that the
+ POS users won't be able to allow discretionary prices and discounts.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Cost price visibility restricted.
+
+
+
+
+
+
+
+
+
+
+
+ Visible only for the users in the group.
+
+
+
+
+
+
+
+
+
+
+
+ By default administrator will be added to this group.
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Adding user to the View Cost Price group
+
+ User will see the product cost price only if he is added in this group.
+
+
+
+
+
+
+ Product view for users not in the group
+
+ Product view for the users not in the group is displayed without the cost price.
+
+
+
+
+
+
+ Product tree view without cost price
+
+ Screenshot for the product tree view without cost price is shown below.
+
+
\ No newline at end of file
diff --git a/hr_zk_attendance/README.rst b/hr_zk_attendance/README.rst
index a84abc237..9f9015289 100644
--- a/hr_zk_attendance/README.rst
+++ b/hr_zk_attendance/README.rst
@@ -19,9 +19,19 @@ Used Libraries:
you can install zklib library using "sudo pip install zklib"
Compatible Devices
+----------------
+This module support with the following machines :
-*ZKteco model 'uFace 202'
-*ZKteco model 'iFace990'
+ uFace202 (ZKteco)
+* iFace990 (ZKteco)
+
+Clients have reported that the module works well with the following machine :
+
+* K40 Pro (ZKteco)
+* SFace900 (ZKteco)
+* FR1500 (ZKteco)
+* UA760 (ZKteco)
+* MB10 (ZKteco
Author
=======
diff --git a/hr_zk_attendance/static/description/index.html b/hr_zk_attendance/static/description/index.html
index feb916ac2..5c7d4877f 100644
--- a/hr_zk_attendance/static/description/index.html
+++ b/hr_zk_attendance/static/description/index.html
@@ -57,7 +57,15 @@
- This module will support with ZKteco model 'uFace 202', ZKteco model 'iFace990'
+ This module support with the following machines :
+ * uFace202 (ZKteco)
+ * iFace990 (ZKteco)
+ -Clients have reported that the module works well with the following machine :
+ * K40 Pro (ZKteco)
+ * SFace900 (ZKteco)
+ * FR1500 (ZKteco)
+ * UA760 (ZKteco)
+ * MB10 (ZKteco)
@@ -135,7 +143,7 @@
- Note:- This integration is only applicable for the device ZKteco model 'uFace 202'
+ Note:-
Please install zklib library (sudo pip install zklib)
- The module helps HR to apply sandwich rule over employees, when they take leave in midst of two general leaves. Sandwich rule shall be applied after considering the start and end days of the general leaves. The module gets with an option to disable this feature for specific employees, also an option for showing the sandwich leave notification when employees apply their leaves.
-
-
-
-
-
Sandwich rule
-
-
-
-
- Sandwich rule can be set on working times.
-
-
- This rule can be disabled for specific employees.
-
-
- Option for showing sandwich leave notification, when applying leaves.
-
+
+
+
+
+
+ Sandwich Rule
+
+ Add Sandwich Rule in Employee Leaves.
+
+
-
-
-
-
-
-
-
Screenshots
-
-
-
-
-
-
-
-
-
After installation, go to working time> Enable/Disable Sandwich Rule.
-
-
-
-
-
-
-
-
If you want, you can disable this feature for specific employees. Check the show notification option for getting sandwhich leave notification when applying for leaves.
-
-
-
-
-
-
-
-
-
-
Here we can see the sandwich rule applied in leaves.
+ The module helps HR to apply sandwich rule over employees, when they take leave in midst of two general
+ leaves. Sandwich rule shall be applied after considering the start and end days of the general leaves.
+ The module gets with an option to disable this feature for specific employees, also an option for
+ showing the sandwich leave notification when employees apply their leaves.
A Collaborative platform for educational management.
-
+
+
+
+
+ Screenshots
+
+
+
+
+ After installation, go to working time> Enable/Disable Sandwich Rule.
+
+
+
+
+
+
+ If you want, you can disable this feature for specific employees. Check the show notification option for
+ getting sandwhich leave notification when applying for leaves.
+
+
+
+
+
+
+ Here we can see the sandwich rule applied in leaves
- Legal case management module helps to manage the Clients,Lawyers,Case Registration,Payments and
- provides pivot reports of the process.
-
-
- Configuration
-
-
- No additional configuration required
-
-
-
-
-
-
-
- Features
-
-
-
- Creating Lawyers and Clients.
-
-
-
- Featuring Case Registration.
-
-
-
- Arrange Sittings for the case
-
-
-
- Provision to add case related attachments
-
-
-
- Payment Of the case and Payslip generation for lawyers
-
-
-
- Offering a pivot report.
-
-
-
-
-
-
-
- Screenshots
-
-
-
- We can create or view the clients from the menu "Clients" under Master Data
-
-
-
-
-
-
- We can create or view the lawyers from the menu "Lawyers" under Master Data
-
-
-
-
-
-
- A new case can be registered from the menu "Case Register" by filling the mandatory fields.
- And can attach any documents if needed.
-
-
-
-
-
-
- And we can add multiple sittings to the same case from the tab "Sittings"
-
-
-
-
-
-
- An Internal Note field is added for adding any notes related to case
-
-
-
-
-
-
- By clicking on the button "Make Payment" we were lead into a form of making payment to the
- corresponding lawyer.
-
-
-
-
-
-
- If we want to add sittings after the payment there is button "Add Sittings" is provided and
- if the case is over we can mark it as by clicking on "Mark as Done"
-
-
-
-
-
-
- The state changes from "Invoiced" to "Completed" after clicking of "Mark As Done"
-
-
-
-
-
-
- We can view the pivot report based on Lawyer,Client,Case Category etc..
-
+ Legal case management module helps to manage the Clients,Lawyers,Case Registration,Payments and provides
+ pivot reports of the process.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Creating Lawyers and Clients
+
+
+
+
+
+
+
+
+
+ Featuring Case Registration
+
+
+
+
+
+
+
+
+
+
+ Arrange Sittings for the case
+
+
+
+
+
+
+
+
+
+
+ Provision to add case related attachments
+
+
+
+
+
+
+
+
+
+
+ Payment Of the case and Payslip generation for lawyers
+
+
+
+
+
+
+
+
+
+
+ Offering a pivot report
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ We can create or view the clients from the menu "Clients" under Master Data
+
+
+
+
+
+
+ We can create or view the lawyers from the menu "Lawyers" under Master Data
+
+
+
+
+
+
+ A new case can be registered from the menu "Case Register" by filling the mandatory fields. And can
+ attach any documents if needed
+
+
+
+
+
+
+
+ And we can add multiple sittings to the same case from the tab "Sittings"
+
+
+
+
+
+
+
+ An Internal Note field is added for adding any notes related to case
+
+
+
+
+
+
+
+ By clicking on the button "Make Payment" we were lead into a form of making payment to the corresponding
+ lawyer
+
+
+
+
+
+
+ If we want to add sittings after the payment there is button "Add Sittings" is provided and if the case
+ is over we can mark it as by clicking on "Mark as Done"
+
+
+
+
+
+
+ The state changes from "Invoiced" to "Completed" after clicking of "Mark As Done"
+
+
+
+
+
+
+ We can view the pivot report based on Lawyer,Client,Case Category etc.
Detect abusive traffic in website without any user friction.
+
+
+ This module will help you to protect the registration and login process, websites have incorporated
+ CAPTCHAs.In fact, for any site that is offering free registration, it is best to set up a CAPTCHA,
+ so that all the registrations are done by humans and not programs or bots.Owners of online stores
+ generally fit CAPTCHAs within their site so that buyers can fill them before beginning any kind of
+ transaction procedure. In an online store, the purpose of CAPTCHA is to ensure that those who are
+ ordering products or services are humans only. Moreover, by using it, owners of online stores can
+ bring down the risks of receiving fake or spam orders.
-
Ease of use, effortless interaction for users.
-
Advanced security, state of the art spam and abuse protection for website.
-
- This module will help you to protect the registration and login process, websites have incorporated CAPTCHAs.In fact, for any site that is offering free registration, it is best to set up a CAPTCHA, so that all the registrations are done by humans and not programs or bots.Owners of online stores generally fit CAPTCHAs within their site so that buyers can fill them before beginning any kind of transaction procedure. In an online store, the purpose of CAPTCHA is to ensure that those who are ordering products or services are humans only. Moreover, by using it, owners of online stores can bring down the risks of receiving fake or spam orders.
-
- Employee can seamlessly order their lunch using this lunch module. The corresponding amount for the
- lunch shall thereafter be deducted from the employee salary of the month.
-
-
- Configuration
-
-
- Add the Salary rule 'Lunch' to the salary structure of the employee.
-
-
-
-
-
-
-
- Features
-
-
-
- Link Lunch and Payroll.
-
-
-
- Deduct Lunch amount from employee pay slip.
-
-
-
-
-
-
-
- Screenshots
-
-
-
- New salary rule named Lunch is added.
-
-
-
-
-
-
- This Lunch rule is added to salary structure.
-
+ Employee can seamlessly order their lunch using this lunch module. The corresponding amount for the
+ lunch shall thereafter be deducted from the employee salary of the month.
+
+
+
+
+
+
+ Configuration
+
+
+
+
+
+ Add the Salary rule 'Lunch' to the salary structure of the employee.
\ No newline at end of file
diff --git a/mobile_service_shop/wizard/__init__.py b/mobile_service_shop/wizard/__init__.py
index 31955eafc..b3ad93ac8 100644
--- a/mobile_service_shop/wizard/__init__.py
+++ b/mobile_service_shop/wizard/__init__.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
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
index 971b7caaa..26114930f 100644
--- a/mobile_service_shop/wizard/mobile_create_invoice.py
+++ b/mobile_service_shop/wizard/mobile_create_invoice.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
import time
diff --git a/odoo-debrand/README.rst b/odoo-debrand/README.rst
deleted file mode 100644
index 7924cb426..000000000
--- a/odoo-debrand/README.rst
+++ /dev/null
@@ -1,57 +0,0 @@
-.. 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
-
-===============
-Odoo Debranding
-===============
-
-Debranding of odoo with the given configurations under Website Admin -> Debranding Configurations.
-Will replace:
-
- - Page Title
- - Odoo from Popups
- - Settings Odoo branding Items
- - User Drop down Odoo links
- - Website Title, footer
- - Powered By Odoo on Backend by your company name
- - Odoo label from Dialogues
- - Odoo Database Selector Logo, Labels
- - Copyright @odoo with your company on website page
-
-Installation
-============
-- www.odoo.com/documentation/12.0/setup/install.html
-- Install our custom addon
-
-Company
--------
-* `Cybrosys Techno Solutions `__
-
-Credits
--------
-* Developer:
- V12 Tintuk Tomin
-
-Contacts
---------
-* Mail Contact : 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/odoo-debrand/__init__.py b/odoo-debrand/__init__.py
deleted file mode 100644
index bcf705a3c..000000000
--- a/odoo-debrand/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2019-TODAY Cybrosys Technologies().
-# Author: Tintuk Tomin()
-#
-# 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/odoo-debrand/__manifest__.py b/odoo-debrand/__manifest__.py
deleted file mode 100644
index 977f03849..000000000
--- a/odoo-debrand/__manifest__.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2019-TODAY Cybrosys Technologies().
-# Author: Tintuk Tomin()
-#
-# 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': "Odoo Debranding",
- 'version': "12.0.1.1.2",
- 'summary': """Debrand Odoo""",
- 'description': """Debrand Odoo,Debranding""",
- 'author': "Cybrosys Techno Solutions",
- 'company': "Cybrosys Techno Solutions",
- 'maintainer': "Cybrosys Techno Solutions",
- 'website': "https://cybrosys.com/",
- 'category': 'Tools',
- 'depends': ['base', 'im_livechat', 'website'],
- 'data': [
- 'views/views.xml'
- ],
- 'demo': [],
- 'qweb': ["static/src/xml/base.xml"],
- 'images': ['static/description/debranding_1.gif'],
- 'license': "AGPL-3",
- 'installable': True,
- 'application': False
-}
diff --git a/odoo-debrand/controllers/__init__.py b/odoo-debrand/controllers/__init__.py
deleted file mode 100644
index 8a47105f1..000000000
--- a/odoo-debrand/controllers/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2019-TODAY Cybrosys Technologies().
-# Author: Tintuk Tomin()
-#
-# 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
\ No newline at end of file
diff --git a/odoo-debrand/controllers/controllers.py b/odoo-debrand/controllers/controllers.py
deleted file mode 100644
index 3ca08f79d..000000000
--- a/odoo-debrand/controllers/controllers.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2019-TODAY Cybrosys Technologies().
-# Author: Tintuk Tomin()
-#
-# 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 imghdr
-import json
-import io
-import base64
-import functools
-from odoo import http, tools
-import odoo, os, sys, jinja2
-from odoo.addons.web.controllers.main import Database
-from odoo.addons.web.controllers import main
-from odoo.tools.mimetypes import guess_mimetype
-from odoo.addons.web.controllers.main import Binary
-from odoo.modules import get_resource_path
-from io import StringIO
-from odoo.http import request
-
-if hasattr(sys, 'frozen'):
- # When running on compiled windows binary, we don't have access to package loader.
- path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'views'))
- loader = jinja2.FileSystemLoader(path)
-else:
- loader = jinja2.PackageLoader('odoo.addons.odoo-debrand', "views")
-env = main.jinja2.Environment(loader=loader, autoescape=True)
-env.filters["json"] = json.dumps
-db_monodb = http.db_monodb
-DBNAME_PATTERN = '^[a-zA-Z0-9][a-zA-Z0-9_.-]+$'
-
-
-class BinaryCustom(Binary):
- @http.route([
- '/web/binary/company_logo',
- '/logo',
- '/logo.png',
- ], type='http', auth="none")
- def company_logo(self, dbname=None, **kw):
- imgname = 'logo'
- imgext = '.png'
- placeholder = functools.partial(get_resource_path, 'web', 'static', 'src', 'img')
- uid = None
- if request.session.db:
- dbname = request.session.db
- uid = request.session.uid
- elif dbname is None:
- dbname = db_monodb()
-
- if not uid:
- uid = odoo.SUPERUSER_ID
-
- if not dbname:
- response = http.send_file(placeholder(imgname + imgext))
- else:
- try:
- # create an empty registry
- registry = odoo.modules.registry.Registry(dbname)
- with registry.cursor() as cr:
- company = int(kw['company']) if kw and kw.get('company') else False
- if company:
- cr.execute("""SELECT logo_web, write_date
- FROM res_company
- WHERE id = %s
- """, (company,))
- else:
- cr.execute("""SELECT c.logo_web, c.write_date
- FROM res_users u
- LEFT JOIN res_company c
- ON c.id = u.company_id
- WHERE u.id = %s
- """, (uid,))
- row = cr.fetchone()
- if row and row[0]:
- image_base64 = base64.b64decode(row[0])
- image_data = io.BytesIO(image_base64)
- mimetype = guess_mimetype(image_base64, default='image/png')
- imgext = '.' + mimetype.split('/')[1]
- if imgext == '.svg+xml':
- imgext = '.svg'
- response = http.send_file(image_data, filename=imgname + imgext, mimetype=mimetype,
- mtime=row[1])
- else:
- response = http.send_file(placeholder('nologo.png'))
- except Exception:
- response = http.send_file(placeholder(imgname + imgext))
-
- return response
-
-
-class OdooDebrand(Database):
-
- def _render_template(self, **d):
-
- d.setdefault('manage', True)
- d['insecure'] = odoo.tools.config.verify_admin_password('admin')
- d['list_db'] = odoo.tools.config['list_db']
- d['langs'] = odoo.service.db.exp_list_lang()
- d['countries'] = odoo.service.db.exp_list_countries()
- d['pattern'] = DBNAME_PATTERN
- website_id = request.env['website'].sudo().search([])
- d['website_name'] = website_id and website_id[0].name or ''
- d['company_name'] = website_id and website_id[0].company_id.name or ''
- d['favicon']= website_id and website_id[0].favicon_url or ''
- d['company_logo_url'] = website_id and website_id[0].company_logo_url or ''
-
- # databases list
- d['databases'] = []
- try:
- d['databases'] = http.db_list()
- d['incompatible_databases'] = odoo.service.db.list_db_incompatible(d['databases'])
- except odoo.exceptions.AccessDenied:
- monodb = db_monodb()
- if monodb:
- d['databases'] = [monodb]
- return env.get_template("database_manager_extend.html").render(d)
diff --git a/odoo-debrand/doc/changelog.md b/odoo-debrand/doc/changelog.md
deleted file mode 100644
index eba899b66..000000000
--- a/odoo-debrand/doc/changelog.md
+++ /dev/null
@@ -1,21 +0,0 @@
-## Module
-
-#### 01.01.2019
-#### Version 12.0.1.0.0
-#### ADD
-Initial Commit for odoo-debrand
-
-#### 10.02.2019
-#### Version 12.0.1.0.1
-#### FIX
-Bug Fixed, Issue in New Db Creation
-
-#### 25.09.2019
-#### Version 12.0.1.1.1
-#### FIX
-Bug Fixed, Icon in database manager.
-
-#### 18.09.2020
-#### Version 12.0.1.1.2
-#### FIX
-Bug Fixed, Icon in database manager.
diff --git a/odoo-debrand/models/__init__.py b/odoo-debrand/models/__init__.py
deleted file mode 100644
index 1a621529e..000000000
--- a/odoo-debrand/models/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2019-TODAY Cybrosys Technologies().
-# Author: Tintuk Tomin()
-#
-# 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/odoo-debrand/models/models.py b/odoo-debrand/models/models.py
deleted file mode 100644
index 444d3a66f..000000000
--- a/odoo-debrand/models/models.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2019-TODAY Cybrosys Technologies().
-# Author: Tintuk Tomin()
-#
-# 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 base64
-import os
-from odoo import models, fields, api, tools
-
-
-class OdooDebrand(models.Model):
- _inherit = "website"
-
- def get_company_logo(self):
- id = self.env.user.company_id.id
- self.company_logo_url ="/web/image/res.company/%s/logo"%(id)
-
- def get_favicon(self):
- id = self.env['website'].sudo().search([])
-
- self.favicon_url ="/web/image/website/%s/favicon"%(id[0].id)
- print("Wesite = ", self.favicon_url)
-
- company_logo = fields.Binary()
- favicon_url = fields.Text("Url", compute='get_favicon')
- company_logo_url = fields.Text("Url", compute='get_company_logo')
diff --git a/odoo-debrand/security/ir.model.access.csv b/odoo-debrand/security/ir.model.access.csv
deleted file mode 100644
index abb2b62ff..000000000
--- a/odoo-debrand/security/ir.model.access.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_odoo-debrand_odoo-debrand,odoo-debrand.odoo-debrand,model_odoo-debrand_odoo-debrand,,1,1,1,1
\ No newline at end of file
diff --git a/odoo-debrand/static/description/cybrosys-odoo-debranding-1.jpg b/odoo-debrand/static/description/cybrosys-odoo-debranding-1.jpg
deleted file mode 100644
index ff2227ddf..000000000
Binary files a/odoo-debrand/static/description/cybrosys-odoo-debranding-1.jpg and /dev/null differ
diff --git a/odoo-debrand/static/description/cybrosys-odoo-debranding-2.jpg b/odoo-debrand/static/description/cybrosys-odoo-debranding-2.jpg
deleted file mode 100644
index b9161600b..000000000
Binary files a/odoo-debrand/static/description/cybrosys-odoo-debranding-2.jpg and /dev/null differ
diff --git a/odoo-debrand/static/description/cybrosys-odoo-debranding-3.jpg b/odoo-debrand/static/description/cybrosys-odoo-debranding-3.jpg
deleted file mode 100644
index 4c9c7f86b..000000000
Binary files a/odoo-debrand/static/description/cybrosys-odoo-debranding-3.jpg and /dev/null differ
diff --git a/odoo-debrand/static/description/cybrosys-odoo-debranding-4.jpg b/odoo-debrand/static/description/cybrosys-odoo-debranding-4.jpg
deleted file mode 100644
index cecad49f4..000000000
Binary files a/odoo-debrand/static/description/cybrosys-odoo-debranding-4.jpg and /dev/null differ
diff --git a/odoo-debrand/static/description/cybrosys-odoo-debranding-5.jpg b/odoo-debrand/static/description/cybrosys-odoo-debranding-5.jpg
deleted file mode 100644
index 45bf7dcb2..000000000
Binary files a/odoo-debrand/static/description/cybrosys-odoo-debranding-5.jpg and /dev/null differ
diff --git a/odoo-debrand/static/description/cybrosys-odoo-debranding-6.jpg b/odoo-debrand/static/description/cybrosys-odoo-debranding-6.jpg
deleted file mode 100644
index 3d81182bf..000000000
Binary files a/odoo-debrand/static/description/cybrosys-odoo-debranding-6.jpg and /dev/null differ
diff --git a/odoo-debrand/static/description/debranding_1.gif b/odoo-debrand/static/description/debranding_1.gif
deleted file mode 100644
index e113fb7a8..000000000
Binary files a/odoo-debrand/static/description/debranding_1.gif and /dev/null differ
diff --git a/odoo-debrand/static/description/icon.png b/odoo-debrand/static/description/icon.png
deleted file mode 100644
index ab8f8330e..000000000
Binary files a/odoo-debrand/static/description/icon.png and /dev/null differ
diff --git a/odoo-debrand/static/description/index.html b/odoo-debrand/static/description/index.html
deleted file mode 100644
index 140861701..000000000
--- a/odoo-debrand/static/description/index.html
+++ /dev/null
@@ -1,399 +0,0 @@
-
-
-
- Want to debrand your company website? Odoo Debranding module developed by Cybrosys Technologies
- helps you to change the aesthetic look of Odoo software via customizing them
- with Logo and other branding changes. The module helps you to change almost every area of Odoo visuals,
- delivering a brand new customized website.
-
-
- Configuration
-
-
- In Odoo 12 some of the debranding features are already removed compared to odoo 11. Branding like powered by in
- both front end and back end is removed and website footer and copyright is already changed to company name in Odoo 12.
-
- So in this debranding app, you need to set up the company logo, website name & favicon by your own from the settings option.
-
-
-
-
-
-
-
- Features
-
-
-
- Modify database selector page
-
-
-
- Modify login page
-
-
-
- Remove Odoo's default favicon
-
-
-
- Updated "About" list
-
-
-
- Removed advertisements from the settings page
-
-
-
- Updated warning messages
-
-
-
- Page title modification
-
-
-
-
-
-
-
-
- Screenshots
-
-
-
- As you see in the settings option you need to set up the Website name & favicon then only the change will be affected
- in the title. Also you need to setup the company logo from the settings page to change the default logo.
-
-
-
-
-
-
- Company logo in login page.
-
-
-
-
-
-
- Powered by in the front-end is removed.
-
- Default title is changed.
-
-
-
-
-
-
- Updated the Odoo title in the messages.
-
-
-
-
-
-
- Updated the Odoo title in the warning message
-
-
-
-
-
-
- Odoo promotional banners in the settings dashboard page is changed.
-
- Odoo accounts and documentation is removed from the dropdown list.
- The module helps you to book orders from Shop,Bar/Restaurant in POS.User can create pickup or delivery orders,later confirm booked orders to POS orders.
-
-
-
-
-
POS Booking Order
-
-
-
-
- Available in Odoo 12.0 community edition.
-
-
- Create booking orders from POS.
-
-
- User can choose pickup or deliver option.
-
-
- List all booked orders in POS screen.
-
- Shows booking reference,contact number,order note, pickup/delivery date and delivery address in the order receipt.
-
-
-
-
-
-
-
-
-
-
Screenshots
-
-
-
-
-
-
-
-
-
After installation,open POS window and go to settings of POS session > Enable/Disable Booking Order.
-
-
-
-
-
-
-
-
Start a new session.
-
-
-
-
-
-
-
-
-
-
In order to create a booking order,you have to select customer.In the absence,it will raise an alert popup.
-
-
-
-
-
-
-
-
-
In order to create a booking order,you have to add products in the Order line. In the absence,it will raise an alert popup with invalid order line.
-
-
-
-
-
-
-
-
-
-
After successfully adding both, booking button gets highlighted, indicating its ready for booking.
-
-
-
-
-
-
-
-
-
-
-
Upon clicking on booking button it will raise a popup window with details of the selected order.
-
-
-
-
-
-
-
-
-
-
-
Upon selecting the pickup option, it shows a field to enter pickup date.
-
-
-
-
-
-
-
-
-
-
-
When selected deliver option, it displays two fields to enter delivery date and delivery address.
-
-
-
-
-
-
-
-
-
-
-
After, confirm pickup/deliver order,the orders get listed under the booked order button.User can confirm the order by clicking on confirm POS order button.
-
-
-
-
-
-
-
-
-
-
-
Upon clicking the Pickup orders button, it enlists all pickup orders.
-
-
-
-
-
-
-
-
-
-
-
Under Delivery orders button, it enlists all available delivery orders.
-
-
-
-
-
-
-
-
-
-
-
On confirming POS order, you can view the order lines and customer assigned with order details.Later can do the payment.
-
-
-
-
-
-
-
-
-
-
-
In the case of picking order,the order receipt will be shown as below,
-
-
-
-
-
-
-
-
-
-
-
And in the case of delivery order,the order receipt will be shown as below,
-
-
-
-
-
-
-
-
-
-
-
The confirmed orders get disappeared from the booked orders list in POS session.
-
-
-
-
-
-
-
-
-
-
-
In the backend, all draft orders are visible in red color and confirmed orders are in green color.
-
-
-
-
-
-
-
-
-
-
-
For instance, draft order form will be like below.
-
-
-
-
-
-
-
-
-
-
-
For instance, confirmed order form will be like below.
+ The module helps you to book orders from Shop,Bar/Restaurant in POS.User can create pickup or
+ delivery orders,later confirm booked orders to POS orders.
+
+ After installation, open POS window and go to settings of POS session > Enable/Disable Booking
+ Order.
+
+
+
+
+
+ Start a new session
+
+ Start a new session as shown below.
+
+
+
+
+
+ Select a customer to create booking order.
+
+ In order to create a booking order,you have to select customer.In the absence,it will raise an alert
+ popup.
+
+
+
+
+
+ Add products in order line to create a booking order
+
+ In order to create a booking order, you have to add products in the Order line. In the absence, it
+ will raise an alert popup with invalid order line.
+
+
+
+
+
+ Booking button is enabled once products amd customers are selected
+
+ After successfully adding both, booking button gets highlighted, indicating its ready for booking.
+
+
+
+
+
+ Pop up with window with details of the selected order
+
+ Upon clicking on booking button it will raise a popup window with details of the selected order.
+
+
+
+
+
+ For pickup option, a pickup date field is shown
+
+ Upon selecting the pickup option, it shows a field to enter pickup date.
+
+
+
+
+
+ Fields to endter delivery date & address
+
+ When selected deliver option, it displays two fields to enter delivery date and delivery address.
+
+
+
+
+
+
+ Confirm order
+
+ After confirming pickup/deliver order, the order gets listed under the booked order button. User can
+ confirm the order by clicking on confirm POS order button.
+
+
+
+
+
+ View all pickup orders
+
+ Upon clicking the Pickup orders button, it enlists all pickup orders.
+
+
+
+
+
+ List of all available delivery orders
+
+ Under Delivery orders button, it enlists all available delivery orders.
+
+
+
+
+
+ Can view order lines & customer assigned with order details on confirming POS order
+
+ On confirming POS order, you can view the order lines and customer assigned with order details.
+ Later can do the payment.
+
+
+
+
+
+ Order receipt for pickup order
+
+ In the case of picking order, the order receipt will be shown as below.
+
+
+
+
+
+ Order receipt for delivery order
+
+ And in the case of delivery order,the order receipt will be shown as below
+
+
+
+
+
+ Confirmed orders are disappeared from the booked orders list
+
+ The confirmed orders are disappeared from the booked orders list in POS session.
+
+
+
+
+
+ View draft & confirmed order from the backend
+
+ In the backend, all draft orders are visible in red color and confirmed orders are in green color.
+
+
+
+
+
+ Draft order form
+
+ Draft order form will be like below.
+
+
+
+
+
+ Confirmed order form
+
+ Confirmed order form will be like below.
+
+
+
+
+
+ POS Order with booking reference
+
+ POS Order with booking reference is shown below.
+
+
+
-
-
-
-
-
-
-
-
-
-
-
Need Any Help?
-
-
-
If you have anything to share with us based on your use of this module, please let us know. We are ready to offer our support.
+ The module allows the POS managers to control the 'Discount' and 'Product
+ Price'in each 'POS'. The manager can disable the 'Discount' and 'Price' option in any
+ POS such that the
+ POS users won't be able to allow discretionary prices and discounts.
+
- The module allows the POS user to set screen lock for his/her POS screen when it is left unattended. The lock feature will provide an extra layer security for individual POS.
-
-
-
-
-
-
- Features
-
-
-
- Screen lock option in POS session configuration.
-
-
-
- Screen lock button in POS.
-
-
-
- Lock screen using keyboard shortcut 'CTRL+L'.
-
-
-
- Login/Unlock screen in pos.
-
-
-
- Extra layer of security.
-
-
-
-
-
-
- Screenshots
-
-
-
- Configuration
-
- Using the newly appeared Boolean button in POS configuration user can enable screen lock option.
-
+ The module allows the POS user to set screen lock for his/her POS screen when it is left unattended.
+ The lock feature will provide an extra layer security for individual POS.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Screen lock option in POS session configuration.
+
+
+
+
+
+
+
+
+
+
+
+ Screen lock button in POS.
+
+
+
+
+
+
+
+
+
+
+
+ Lock screen using keyboard shortcut 'CTRL+L'.
+
+
+
+
+
+
+
+
+
+
+
+ Login/Unlock screen in POS.
+
+
+
+
+
+
+
+
+
+
+
+ Extra layer of security.
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Configuration
+
+ Using the newly appeared Boolean button in POS configuration user can enable screen lock option.
+
+
+
+
+
+
+ Lock Screen
+
+ Once the screen is locked the POS screen will look as follows.
+
- Using this application one can assign multiple order notes to an order line, add text to the order note manually and select them from a variety of selections.
-
-
-
-
-
Multiple Orderline Notes In POS
-
-
-
-
- Available in Odoo 12.0 community edition.
-
-
- Allow to add multiple order notes in pos order lines.
-
-
-
-
-
-
-
-
-
Screenshots
-
-
-
-
-
-
-
-
-
Install Multiple Orderline Notes In POS from the Apps menu.
-
-
-
-
-
-
-
-
Go to Point of Sale->Configuration->Point of sale, select the required
- point of sale and enable the button Order line note.
-
-
-
-
-
-
-
-
-
-
Under configuration menu, we can see the option POS Order notes. Upon clicking it, this will lead to a page of creating multi order notes.
-
-
-
-
-
-
-
-
-
FFrom here we can add or remove the order notes. The order notes created from here will appear in the frontend of POS.
-
-
-
-
-
-
-
-
By opening a session we can see a new button Multi Notes ,we can use this
- button after selecting a product in the order line.
-
-
-
-
-
-
-
-
By clicking on the button, a popup arrives which displays order notes created in the backend. One can select them for the required order line and also can type new order note in the text area.
-
-
-
-
-
-
-
-
Selected notes will appear in the corresponding order line.
-
-
-
-
-
-
-
-
By generating the pos ticket, the order notes that we selected will appear in the bill alongside the products.
+ Using this application one can assign multiple order notes to an order line, add text to the order note
+ manually and select them from a variety of selections.
A Collaborative platform for educational management.
-
+
+
+
+
+ Screenshots
+
+
+
+
+ Installation
+
+ Install Multiple Orderline Notes In POS from the Apps menu
+
+
+
+
+
+
+ Configuration
+
+ Go to Point of Sale->Configuration->Point of sale, select the required point of sale and enable the
+ button Order line note.
+
+
+
+
+
+
+ POS Order Notes
+
+ Under configuration menu, we can see the option POS Order notes. Upon clicking it, this will lead to a
+ page of creating multi order notes.
+
+
+
+
+
+ Add or Remove Order Notes
+
+ From here we can add or remove the order notes. The order notes created from here will appear in the
+ frontend of POS.
+
+
+
+
+
+
+ Multi Notes Button
+
+ By opening a session we can see a new button Multi Notes ,we can use this button after selecting a
+ product in the order line
+
+
+
+
+
+
+ Order Notes
+
+ By clicking on the button, a popup arrives which displays order notes created in the backend. One can
+ select them for the required order line and also can type new order note in the text area.
+
+
+
+
+
+
+ Selected Notes
+
+ Selected notes will appear in the corresponding order line.
+
+
+
+
+
+
+
+ Pos Ticket
+
+ By generating the pos ticket, the order notes that we selected will appear in the bill alongside the
+ products.
+
- POS Multi-variant module is an advanced way for managing product variants from the point of sale application. The module helps the user to configure product variants straight from POS. User can set extra price, also activate/inactivate the option for variants. As multi-variant products are displayed with a label, it comes easy for the user to sort which is multi-variant and which is not. User can confirm the variant type to POS orders.
-
-
-
-
-
POS Multi-variant
-
-
-
-
- Multi-variant option in product configuration.
-
-
- Option for adding extra price for the variant.
-
-
- Option for activating/inactivating variant types in POS.
-
-
- Notification for multi-variant products in POS.
-
-
- Easy selection of variant type from wizard.
-
-
- Displays variant details in order receipt and order.
-
-
-
-
-
-
-
-
-
Screenshots
-
-
-
-
-
-
-
-
-
After installation, go to Products > Enable POS variants option.
+ POS Multi-variant module is an advanced way for managing product variants from the point of sale
+ application. The module helps the user to configure product variants straight from POS. User can set
+ extra price, also activate/inactivate the option for variants. As multi-variant products are
+ displayed with a label, it comes easy for the user to sort which is multi-variant and which is not.
+ User can confirm the variant type to POS orders.
+
- By installing this module, we can set available product categories for each POS in our system.
- Only those categories set in the POS will be available in that particular POS.
-
-
-
-
-
-
- Features
-
-
-
- Set available product categories for each POS.
-
-
-
-
-
-
- Screenshots
-
-
-
- You can set it in POS form as:
-
- Point of sale > Configuration > Point of Sale > Available Product Categories.
-
+ By installing this module, we can set available product categories for each POS in our system. Only
+ those categories set in the POS will be available in that particular POS.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Set available product categories for each POS
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Set POS Product Category Filter
+
+ You can set it in POS form as:Point of sale > Configuration > Point of Sale > Available Product
+ Categories .
+
- The module helps in printing the product’s Reference in in their POS Receipts.
- Also, it enables the end user to view products with Product reference in the POS Screen.
-
-
-
-
-
-
-
- Features
-
-
-
- Product names with product reference.
-
-
-
- Print POS receipts with Product references.
-
-
-
-
-
-
-
- Screenshots
-
-
-
-
- The product reference will displays with product name.
-
-
-
-
-
-
-
- Product Reference In Pos Order Lines .
-
-
-
-
-
-
-
- The receipt generated by POS is as follows.
-
+ The module helps in printing the product's Reference in in their POS Receipts. Also, it enables
+ the end user to view products with Product reference in the POS Screen.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Product names with product reference.
+
+
+
+
+
+
+
+
+
+
+
+ Print POS receipts with Product references.
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Product reference displayed with their name
+
+ The product reference will be displayed along with the product name.
+
+
+
+
+
+
+ Product Reference In POS Order Lines
+
+ Product reference is shown in the POS order lines.
+
- POS Quotation Orders is a plugin that facilitates the creation and management of Quotation orders from POS window.
- By default, you can’t create a quotation order from POS window in Odoo. But in some cases, such a simple option can make considerable changes in your sales. This plugin will add a ‘Create Quotation’ in POS window and will facilitate the Quotation creation process without affecting the normal workflow of POS.
-
-
- Configuration
-
-
- Go to Configuration-->Point of Sale-->'Enable Quotation'
-
-
-
-
-
-
- Features
-
-
-
- 'Create Quotation' button in POS
-
-
-
- Create pos quotations
-
-
-
- 'Quotation List' button in POS
-
-
-
- Quotation list window
-
-
-
- Manage quotations from POS
-
-
-
- Quotation reference in order receipt and order
-
-
-
-
-
-
- Screenshots
-
-
-
-
- After installation, open POS window and start and new Session.
-
-
-
-
-
-
-
- In order to create a quotation you have to add products in Order line. Otherwise it will raise an alert popup with invalid order line.
-
-
-
-
-
-
-
-
- Add the products in order line and click ‘Create Quotation’ it will give you a popup to add order date and a note for quotation
-
-
-
-
-
-
-
-
- Once you have successfully created a quotation, you will get a Quotation reference number as in the figure.
-
-
-
-
-
-
-
-
- You can view and manage the created PoS quotations from Point of Sale -> Orders -> Quotation
-
-
-
-
-
-
-
-
- Click on any of the quotation to view the details of the particular quotation.
-
-
-
-
-
-
-
-
- You can view all ‘Draft’ quotation by clicking ‘Quotation List' button in POS. Click the corresponding ‘Confirm’ button.
-
-
-
-
-
-
-
-
- On confirming quotation, you can view the order lines and customer assigned with quotation details.
-
-
-
-
-
-
-
-
- POS Receipt with Quotation Reference
-
-
-
-
-
-
-
-
- Now, if you go to the quotation details you can see that the Quotation status is changed to ‘confirmed’.
-
- This module allows users to set floor facility charges on Products,i.e
- extra charges are set for products according to the floor used by customers.
-
-
-
-
-
-
-
- Features
-
-
-
- Facilities With Charging Percentage.
-
-
-
- Facility Lines in Floor Master.
-
-
-
- Enables Separate Price in Floors Wise.
-
-
-
- Simple Configuration.
-
-
-
-
-
-
- Screenshots
-
-
-
- Facility Master - Tree View
-
-
-
-
-
-
- Facility Master - Form View
-
-
Facilities with its charging percentage.
-
Images and bullet points of facility.
-
-
-
-
-
-
-
- Floor Master With Facility Lines - Form View
-
-
Facility lines with its charging percentage.
-
User can alter its charges from this lines.
-
Automated total affecting facility percentage of floor.
-
-
-
-
-
-
-
- Floor Wise Price Change - POS Screen
-
-
Floor facility charge will added with actual price of product.
+ This module allows users to set floor facility charges on Products,i.e extra charges are set for
+ products according to the floor used by customers.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Facilities With Charging Percentage
+
+
+
+
+
+
+
+
+
+ Facility Lines in Floor Master
+
+
+
+
+
+
+
+
+
+
+ Enables Separate Price in Floors Wise
+
+
+
+
+
+
+
+
+
+
+ Simple Configuration
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Facility Master - Tree View
+
+
+
+
+
+
+ Facility Master - Form View
+
+ Facilities with its charging percentage. Images and bullet points of facility.
+
+
+
+
+
+
+ Floor Master With Facility Lines - Form View
+
+ Facility lines with its charging percentage. User can alter its charges from this lines. Automated
+ total affecting facility percentage of floor.
+
+
+
+
+
+
+
+ Floor Wise Price Change - POS Screen
+
+ Floor facility charge will added with actual price of product.
+
+
- Currently in Odoo POS receipt there is no company logo.
- This module adds the company logo to the POS receipt so that the users will get more information about
- the company from the receipt. Also replace the default POS logo in the Status bar with Company logo.
-
-
-
-
-
-
- Features
-
-
-
- Company logo and info will be displayed in POS receipt.
-
-
-
-
-
-
-
- Screenshots
-
-
-
- Differences between old and new look of POS receipt.
-
-
-
-
-
-
- Differences between old and new look of POS Logo.
-
+ Currently in Odoo POS receipt there is no company logo. This module adds the company logo to the POS
+ receipt so that the users will get more information about the company from the receipt. Also replace
+ the default POS logo in the Status bar with Company logo..
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Company logo and info will be displayed in POS receipt.
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ POS Receipt: Old & New Logo
+
+ Differences between old and new look of POS receipt.
+
+
+
+
+ POS Logo: New & Old
+
+ Differences between old and new look of POS Logo.
\ No newline at end of file
diff --git a/product_profit_report/README.rst b/product_profit_report/README.rst
new file mode 100644
index 000000000..c1aaef070
--- /dev/null
+++ b/product_profit_report/README.rst
@@ -0,0 +1,42 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Product Profit Report
+=====================
+This module is used to print the product wise profit report.
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+Developer: (V12) 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/product_profit_report/__init__.py b/product_profit_report/__init__.py
new file mode 100644
index 000000000..62f3ac629
--- /dev/null
+++ b/product_profit_report/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# 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 .
+#
+###############################################################################
+from . import report
+from . import wizard
diff --git a/product_profit_report/__manifest__.py b/product_profit_report/__manifest__.py
new file mode 100644
index 000000000..e49e48f22
--- /dev/null
+++ b/product_profit_report/__manifest__.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# 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 .
+#
+###############################################################################
+{
+ 'name': 'Product Profit Report',
+ 'version': '12.0.1.0.0',
+ 'category': 'Productivity',
+ 'summary': 'The product profit report module provides detailed insights '
+ 'and analysis on the profitability of individual products',
+ 'description': 'This module generates a report specifically focused on '
+ 'analyzing the profitability of different products within '
+ 'a business. This module provides valuable insights into '
+ 'the financial performance of individual products, '
+ 'allowing businesses to make informed decisions regarding '
+ 'their product offerings, pricing strategies, and resource '
+ 'allocation.',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['account'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'wizard/product_profit_report_views.xml',
+ 'report/product_profit_report_templates.xml',
+ 'report/product_profit_report.xml',
+ ],
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/product_profit_report/doc/RELEASE_NOTES.md b/product_profit_report/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..4fbf339d5
--- /dev/null
+++ b/product_profit_report/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 27.09.2023
+#### Version 12.0.1.0.0
+##### ADD
+- Initial commit for Product Profit Report.
diff --git a/product_profit_report/report/__init__.py b/product_profit_report/report/__init__.py
new file mode 100644
index 000000000..90ca3bb7a
--- /dev/null
+++ b/product_profit_report/report/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# 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 .
+#
+###############################################################################
+from . import product_profit_report
diff --git a/product_profit_report/report/product_profit_report.py b/product_profit_report/report/product_profit_report.py
new file mode 100644
index 000000000..1e3db4b2d
--- /dev/null
+++ b/product_profit_report/report/product_profit_report.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# 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 .
+#
+###############################################################################
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+
+
+class ReportRender(models.AbstractModel):
+ """Model to print the report"""
+ _name = 'report.product_profit_report.product_profit_report'
+ _description = 'Product Profit Report Render'
+
+ @api.multi
+ def _get_report_values(self, docid, data):
+ """This method takes the value to the pdf report"""
+ return self.generate_report_values(data['form'])
+
+ @api.model
+ def generate_report_values(self, data):
+ """Generate values for the report based on condition"""
+ domain = [('invoice_id.date_invoice', '>=', data['from_date']),
+ ('invoice_id.date_invoice', '<=', data['to_date']),
+ ('invoice_id.state', 'in', ['open', 'paid']),
+ ('company_id', '=', data['company_id'][0]),
+ ('invoice_id.type', 'in', ['out_invoice', 'out_refund'])]
+ if data['from_date'] > data['to_date']:
+ raise ValidationError(_('From date must be less than To date'))
+ if data['product_id']:
+ domain += [('product_id.id', '=', data['product_id'][0])]
+ orders = self.env['account.invoice.line'].search(domain, order='name')
+ groups = {}
+ for order in orders:
+ if order.product_id.id in data['product_product_ids']:
+ dic_name = str(order.product_id.id)
+ quantity = order.quantity
+ price = quantity * (order.price_unit - order.discount)
+ expense = order.product_id.get_history_price(
+ order.company_id.id,
+ date=order.invoice_id.date_invoice) * quantity
+ if expense == 0.0:
+ expense = order.product_id.standard_price * quantity
+ if order.invoice_id.type == 'out_refund':
+ quantity = -quantity
+ price = -price
+ expense = -expense
+ profit = price - expense
+ if not groups.get(dic_name):
+ groups[dic_name] = {}
+ groups[dic_name].update({
+ 'qty': quantity,
+ 'unit': order.product_id.uom_id.name,
+ 'sales': price,
+ 'expense': expense,
+ 'profit': profit,
+ 'name': order.product_id.name
+ })
+ else:
+ groups[dic_name].update({
+ 'qty': groups[dic_name].get('qty') + quantity,
+ 'sales': groups[dic_name].get('sales') + price,
+ 'expense': groups[dic_name].get('expense') + expense,
+ 'profit': groups[dic_name].get('profit') + profit
+ })
+ return {
+ 'data': data,
+ 'groups': groups,
+ 'report_date': fields.Datetime.now().strftime("%Y-%m-%d"),
+ }
diff --git a/product_profit_report/report/product_profit_report.xml b/product_profit_report/report/product_profit_report.xml
new file mode 100644
index 000000000..1acf40c96
--- /dev/null
+++ b/product_profit_report/report/product_profit_report.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Product Profit Report
+ product.profit.report
+ qweb-pdf
+ product_profit_report.product_profit_report
+ product_profit_report.product_profit_report
+
+ report
+
+
diff --git a/product_profit_report/report/product_profit_report_templates.xml b/product_profit_report/report/product_profit_report_templates.xml
new file mode 100644
index 000000000..a74eb9f7f
--- /dev/null
+++ b/product_profit_report/report/product_profit_report_templates.xml
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+
+ Product Profit Report
+
+
+
+
+
+
+
+
+ From Date:-
+
+
+
+
+
+
+
+ To Date:-
+
+
+
+
+
+
+
+
+
+
+
+ Product Category:-
+
+
+
+
+
+
+
+
+
+
+
No
+
Product
+
Qty
+
Unit
+
Cost
+
Sale Amount
+
Profit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No Data available...!!!
+
+
+
+
+
+
+
+
diff --git a/product_profit_report/security/ir.model.access.csv b/product_profit_report/security/ir.model.access.csv
new file mode 100644
index 000000000..7df0bbc2c
--- /dev/null
+++ b/product_profit_report/security/ir.model.access.csv
@@ -0,0 +1,3 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_product_profit_report_manager,access.product.profit.report.manager,model_product_profit_report,account.group_account_manager,1,1,1,1
+access_product_profit_report_user,access.product.profit.report.user,model_product_profit_report,account.group_account_user,1,0,0,0
diff --git a/product_profit_report/static/description/assets/icons/check.png b/product_profit_report/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/check.png differ
diff --git a/product_profit_report/static/description/assets/icons/chevron.png b/product_profit_report/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/chevron.png differ
diff --git a/product_profit_report/static/description/assets/icons/cogs.png b/product_profit_report/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/cogs.png differ
diff --git a/product_profit_report/static/description/assets/icons/consultation.png b/product_profit_report/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/consultation.png differ
diff --git a/product_profit_report/static/description/assets/icons/ecom-black.png b/product_profit_report/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/ecom-black.png differ
diff --git a/product_profit_report/static/description/assets/icons/education-black.png b/product_profit_report/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/education-black.png differ
diff --git a/product_profit_report/static/description/assets/icons/hotel-black.png b/product_profit_report/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/hotel-black.png differ
diff --git a/product_profit_report/static/description/assets/icons/license.png b/product_profit_report/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/license.png differ
diff --git a/product_profit_report/static/description/assets/icons/lifebuoy.png b/product_profit_report/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/lifebuoy.png differ
diff --git a/product_profit_report/static/description/assets/icons/logo.png b/product_profit_report/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/logo.png differ
diff --git a/product_profit_report/static/description/assets/icons/manufacturing-black.png b/product_profit_report/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/manufacturing-black.png differ
diff --git a/product_profit_report/static/description/assets/icons/pos-black.png b/product_profit_report/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/pos-black.png differ
diff --git a/product_profit_report/static/description/assets/icons/puzzle.png b/product_profit_report/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/puzzle.png differ
diff --git a/product_profit_report/static/description/assets/icons/restaurant-black.png b/product_profit_report/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/restaurant-black.png differ
diff --git a/product_profit_report/static/description/assets/icons/service-black.png b/product_profit_report/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/service-black.png differ
diff --git a/product_profit_report/static/description/assets/icons/trading-black.png b/product_profit_report/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/trading-black.png differ
diff --git a/product_profit_report/static/description/assets/icons/training.png b/product_profit_report/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/training.png differ
diff --git a/product_profit_report/static/description/assets/icons/update.png b/product_profit_report/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/update.png differ
diff --git a/product_profit_report/static/description/assets/icons/user.png b/product_profit_report/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/user.png differ
diff --git a/product_profit_report/static/description/assets/icons/wrench.png b/product_profit_report/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/product_profit_report/static/description/assets/icons/wrench.png differ
diff --git a/product_profit_report/static/description/assets/misc/categories.png b/product_profit_report/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/categories.png differ
diff --git a/product_profit_report/static/description/assets/misc/check-box.png b/product_profit_report/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/check-box.png differ
diff --git a/product_profit_report/static/description/assets/misc/compass.png b/product_profit_report/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/compass.png differ
diff --git a/product_profit_report/static/description/assets/misc/corporate.png b/product_profit_report/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/corporate.png differ
diff --git a/product_profit_report/static/description/assets/misc/customer-support.png b/product_profit_report/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/customer-support.png differ
diff --git a/product_profit_report/static/description/assets/misc/cybrosys-logo.png b/product_profit_report/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/product_profit_report/static/description/assets/misc/features.png b/product_profit_report/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/features.png differ
diff --git a/product_profit_report/static/description/assets/misc/logo.png b/product_profit_report/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/logo.png differ
diff --git a/product_profit_report/static/description/assets/misc/pictures.png b/product_profit_report/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/pictures.png differ
diff --git a/product_profit_report/static/description/assets/misc/pie-chart.png b/product_profit_report/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/pie-chart.png differ
diff --git a/product_profit_report/static/description/assets/misc/right-arrow.png b/product_profit_report/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/right-arrow.png differ
diff --git a/product_profit_report/static/description/assets/misc/star.png b/product_profit_report/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/star.png differ
diff --git a/product_profit_report/static/description/assets/misc/support.png b/product_profit_report/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/support.png differ
diff --git a/product_profit_report/static/description/assets/misc/whatsapp.png b/product_profit_report/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/product_profit_report/static/description/assets/misc/whatsapp.png differ
diff --git a/product_profit_report/static/description/assets/modules/1.jpg b/product_profit_report/static/description/assets/modules/1.jpg
new file mode 100644
index 000000000..ccb8e1556
Binary files /dev/null and b/product_profit_report/static/description/assets/modules/1.jpg differ
diff --git a/product_profit_report/static/description/assets/modules/2.jpg b/product_profit_report/static/description/assets/modules/2.jpg
new file mode 100755
index 000000000..9b8e25189
Binary files /dev/null and b/product_profit_report/static/description/assets/modules/2.jpg differ
diff --git a/product_profit_report/static/description/assets/modules/3.jpg b/product_profit_report/static/description/assets/modules/3.jpg
new file mode 100644
index 000000000..5da168516
Binary files /dev/null and b/product_profit_report/static/description/assets/modules/3.jpg differ
diff --git a/product_profit_report/static/description/assets/modules/4.jpg b/product_profit_report/static/description/assets/modules/4.jpg
new file mode 100644
index 000000000..9360137da
Binary files /dev/null and b/product_profit_report/static/description/assets/modules/4.jpg differ
diff --git a/product_profit_report/static/description/assets/modules/5.jpg b/product_profit_report/static/description/assets/modules/5.jpg
new file mode 100644
index 000000000..d048dde7d
Binary files /dev/null and b/product_profit_report/static/description/assets/modules/5.jpg differ
diff --git a/product_profit_report/static/description/assets/modules/6.jpg b/product_profit_report/static/description/assets/modules/6.jpg
new file mode 100644
index 000000000..e10c28799
Binary files /dev/null and b/product_profit_report/static/description/assets/modules/6.jpg differ
diff --git a/product_profit_report/static/description/assets/screenshots.zip b/product_profit_report/static/description/assets/screenshots.zip
new file mode 100644
index 000000000..140dcf030
Binary files /dev/null and b/product_profit_report/static/description/assets/screenshots.zip differ
diff --git a/product_profit_report/static/description/assets/screenshots/1.png b/product_profit_report/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..d45558fa0
Binary files /dev/null and b/product_profit_report/static/description/assets/screenshots/1.png differ
diff --git a/product_profit_report/static/description/assets/screenshots/2.png b/product_profit_report/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..50edf9f46
Binary files /dev/null and b/product_profit_report/static/description/assets/screenshots/2.png differ
diff --git a/product_profit_report/static/description/assets/screenshots/3.png b/product_profit_report/static/description/assets/screenshots/3.png
new file mode 100644
index 000000000..7e180f0b6
Binary files /dev/null and b/product_profit_report/static/description/assets/screenshots/3.png differ
diff --git a/product_profit_report/static/description/assets/screenshots/hero.gif b/product_profit_report/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..612e7b1a3
Binary files /dev/null and b/product_profit_report/static/description/assets/screenshots/hero.gif differ
diff --git a/product_profit_report/static/description/banner.jpg b/product_profit_report/static/description/banner.jpg
new file mode 100644
index 000000000..31683ea59
Binary files /dev/null and b/product_profit_report/static/description/banner.jpg differ
diff --git a/product_profit_report/static/description/icon.png b/product_profit_report/static/description/icon.png
new file mode 100644
index 000000000..e222495a8
Binary files /dev/null and b/product_profit_report/static/description/icon.png differ
diff --git a/product_profit_report/static/description/index.html b/product_profit_report/static/description/index.html
new file mode 100644
index 000000000..a23d79df1
--- /dev/null
+++ b/product_profit_report/static/description/index.html
@@ -0,0 +1,501 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+
+
+
+
+
+
+
+ Product Profit Report
+
This Module let you Generate Product Wise Profit Report.
+ With this module you can generate Product Wise Profit Report. It gives a clear view of which products
+ and product mixes are cost-effective. In addition to managing current results, the analysis can
+ refine product pricing strategies
+
+
+
+
+
+
+
+
+
Features
+
+
+
+
+
+
+ Community &
+ Enterprise Support.
+
+
+
+ Support in Desktop & Mobile.
+
+
+
+ Generate product wise profit report
+
+
+
+
+
+
+
+
+
+
Screenshots
+
+
+
+
+
+
Print Product-Profit Report
+
+
+ Choose the Product Profit Report menu item from Reporting Menu
+ Quality assurance/control is not a new term in this industrial world. Almost everything has some
+ specific quality standards. and it varies with the different attributes like, who is using and where
+ is using.. etc. This module allows Odoo users to ensure quality specification of the items they are
+ using in their business. This module provides quality alerts and quality test along with control in
+ inventory moves based on the test result.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Quality Measures
+
+
+
+
+
+
+
+
+ Quality Alert
+
+
+
+
+
+
+
+
+
+
+ Quality Tests
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Qualitative And Quantitative
+
+
+
+
+
+
+ If you have configured Quality Measure for a product, whenever the product undergoes Trigger On
+ operation, Odoo will create a Quality Alert
+
+
+
+
+
+
+ The user can access the Quality Alerts generated from the operation itself
+
+
+
+
+
+
+
+ Generate Tests button will create Quality Tests for the product based on Quality Measures.
+
+
+
+
+
+
+
+ Quality manager can assign Quality Tests to different users
+
+
+
+
+
+
+
+ Quality users will have a list of Quality Tests that are assigned to them. Now the user can update
+ the test result to the Quality Test record
+
+
+
+
+
+
+ Important changes made on Quality Tests will be tracked by the system
+
+
+
+
+
+
+ Result updated on the Quality Tests will reflect on related Quality Alerts
+
+
+
+
+
+
+ Inventory user cannot proceed with an item that is failed in Quality Test. User will get a warning
+ message when they try
- The module, allows the user to set sales promotion offers on products and product category.
- Create product and Product category based specific promotion rules and improve the sales.
-
-
-
-
-
-
-
- Features
-
-
-
- Create sales promotion offers for products.
-
-
-
- Create sales promotion offers for product categories.
-
-
- Attract more customers.
-
-
-
-
-
-
- Create Promotion Rules
-
-
-
- Case 1.Buy One get One Free.
-
-
-
-
-
-
-
-
-
- Case 2.Buy 2 Get Another Free
-
-
-
-
-
-
-
-
-
- You must tick the check box to get the product in the sales promotion window.
- Also it helps to identify the promotional products.
-
-
-
-
-
Select Offer In Sale Order
-
-
- Select the promotion rule in the sale order and click on 'Apply Offer'
-
+ The module, allows the user to set sales promotion offers on products and product category. Create
+ product and Product category based specific promotion rules and improve the sales.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Create sales promotion offers for products.
+
+
+
+
+
+
+
+
+
+
+
+ Create sales promotion offers for product categories.
+
+
+
+
+
+
+
+
+
+
+
+ Attract more customers.
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Create Promotion Rules
+
+ You can create promotion rules.
+
+
+
+
+
+
+
+
+
+ Choose products to showcase in the sales promotion window
+
+ You must tick the check box to get the product in the sales promotion window. Also it helps to
+ identify the promotional products.
+
+
+
+
+
+
+
+ Select Offer In Sale Order
+
+ Select the promotion rule in the sale order and click on 'Apply Offer'.
+
- This module helps to address a contact, sale or invoice in care of someone else and calculate a percentage-wise commission amount for their effort.
-
-
-
-
-
-
-
Screenshots
-
-
-
-
-
-
-
-
-
After installation, from Sales > Configuration > Settings > Quotations & Orders, you can set default C/O commission percentage.
-
-
-
-
-
-
-
-
-
Choose one Care of Partner from contact and set default commission percentage or,
-
-
-
-
-
-
-
-
-
-
Possible to change/set the default Care of Partner for a customer from sale order before confirming the order.
-
-
-
-
-
-
-
-
-
-
Possible to change/set the default Care of Partner for a customer from Invoice before validation.
-
-
-
-
-
-
-
-
-
-
Print the Care of Partner report.
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Sales Care of Commission
+
+ Record care of commission in contact, sale order, invoice and print their pdf report
+
+ This module helps to address a contact, sale or invoice in care of someone else and calculate a
+ percentage-wise commission amount for their effort.
\ No newline at end of file
diff --git a/stock_exipry_reprt/static/description/assets/icons/check.png b/stock_exipry_reprt/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/check.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/chevron.png b/stock_exipry_reprt/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/chevron.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/cogs.png b/stock_exipry_reprt/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/cogs.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/consultation.png b/stock_exipry_reprt/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/consultation.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/ecom-black.png b/stock_exipry_reprt/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/ecom-black.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/education-black.png b/stock_exipry_reprt/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/education-black.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/hotel-black.png b/stock_exipry_reprt/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/hotel-black.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/license.png b/stock_exipry_reprt/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/license.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/lifebuoy.png b/stock_exipry_reprt/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/lifebuoy.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/logo.png b/stock_exipry_reprt/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/logo.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/manufacturing-black.png b/stock_exipry_reprt/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/manufacturing-black.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/pos-black.png b/stock_exipry_reprt/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/pos-black.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/puzzle.png b/stock_exipry_reprt/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/puzzle.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/restaurant-black.png b/stock_exipry_reprt/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/restaurant-black.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/service-black.png b/stock_exipry_reprt/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/service-black.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/trading-black.png b/stock_exipry_reprt/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/trading-black.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/training.png b/stock_exipry_reprt/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/training.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/update.png b/stock_exipry_reprt/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/update.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/user.png b/stock_exipry_reprt/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/user.png differ
diff --git a/stock_exipry_reprt/static/description/assets/icons/wrench.png b/stock_exipry_reprt/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/icons/wrench.png differ
diff --git a/stock_exipry_reprt/static/description/assets/modules/1.png b/stock_exipry_reprt/static/description/assets/modules/1.png
new file mode 100644
index 000000000..9aeec92c9
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/modules/1.png differ
diff --git a/stock_exipry_reprt/static/description/assets/modules/2.png b/stock_exipry_reprt/static/description/assets/modules/2.png
new file mode 100644
index 000000000..6bd27b8b5
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/modules/2.png differ
diff --git a/stock_exipry_reprt/static/description/assets/modules/3.png b/stock_exipry_reprt/static/description/assets/modules/3.png
new file mode 100644
index 000000000..4e4ea0e51
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/modules/3.png differ
diff --git a/stock_exipry_reprt/static/description/assets/modules/4.png b/stock_exipry_reprt/static/description/assets/modules/4.png
new file mode 100644
index 000000000..164c1e5cd
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/modules/4.png differ
diff --git a/stock_exipry_reprt/static/description/assets/modules/5.png b/stock_exipry_reprt/static/description/assets/modules/5.png
new file mode 100644
index 000000000..7d02e0662
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/modules/5.png differ
diff --git a/stock_exipry_reprt/static/description/assets/modules/6.png b/stock_exipry_reprt/static/description/assets/modules/6.png
new file mode 100644
index 000000000..0c9bb377e
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/modules/6.png differ
diff --git a/stock_exipry_reprt/static/description/assets/screenshots/hero.png b/stock_exipry_reprt/static/description/assets/screenshots/hero.png
new file mode 100644
index 000000000..4ac221cbf
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/screenshots/hero.png differ
diff --git a/stock_exipry_reprt/static/description/assets/screenshots/screenshot-1.jpg b/stock_exipry_reprt/static/description/assets/screenshots/screenshot-1.jpg
new file mode 100644
index 000000000..a98d4d10f
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/screenshots/screenshot-1.jpg differ
diff --git a/stock_exipry_reprt/static/description/assets/screenshots/screenshot-2.jpg b/stock_exipry_reprt/static/description/assets/screenshots/screenshot-2.jpg
new file mode 100644
index 000000000..d9dd97d1d
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/screenshots/screenshot-2.jpg differ
diff --git a/stock_exipry_reprt/static/description/assets/screenshots/screenshot-3.jpg b/stock_exipry_reprt/static/description/assets/screenshots/screenshot-3.jpg
new file mode 100644
index 000000000..667be6ed0
Binary files /dev/null and b/stock_exipry_reprt/static/description/assets/screenshots/screenshot-3.jpg differ
diff --git a/stock_exipry_reprt/static/description/index.html b/stock_exipry_reprt/static/description/index.html
index fe7452035..447989f02 100644
--- a/stock_exipry_reprt/static/description/index.html
+++ b/stock_exipry_reprt/static/description/index.html
@@ -1,356 +1,633 @@
-
-
-
-
- Stock Expiry Report
-
-
- Stock Expiry Report enables the users to print report of the products which are going to expired based on the number of days that we are specified.
-
- Introducing the Stock Expiry Report to Odoo 11 community version. This can be used for printing pdf reports of the stock of products which will expired within the date that we entered.
- And these module also provides location wise expiry report.
-
-
- Configuration
-
-
- We have to enable 'Lots and Serial Numbers' and 'Expiration Date' from the settings.No other configurations are required.
-
-
-
-
-
-
-
- Features
-
-
-
- Provides report of the products which will expire within the mentioned date.
-
-
-
- Provides Location wise Report.
-
-
-
- Expiry Report based on specific locations also included.
-
-
-
-
-
-
-
- Screenshots
-
-
-
- For the report Purpose We have to enable 'Lots and Serial Numbers' and 'Expiration Date' from the settings.
-
-
-
-
-
-
- Here the field Generate Report For(days) specifies the number of days the we want to generate the report.
-
-
-
-
-
-
- Now the report is generated based on the conditions that we provided.
-
+ Introducing the Stock Expiry Report to Odoo 11 community version. This can be used for printing PDF
+ reports of the stock of products which will expired within the date that we entered. And these
+ module also provides location wise expiry report.
+
+
+
+
+
+
+
+
+
+ Configuration
+
+
+
+
+
+ We have to enable 'Lots and Serial Numbers' and 'Expiration Date' from the settings.No other
+ configurations are required.
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Provides report of the products which will expire within the mentioned date.
+
+
+
+
+
+
+
+
+
+
+
+ Provides Location wise Report.
+
+
+
+
+
+
+
+
+
+
+
+ Expiry Report based on specific locations also included.
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Enable 'Lots and Serial Numbers' & 'Expiration Date'
+
+ For the report purpose, we have to enable 'Lots and Serial Numbers' and 'Expiration Date' from the
+ settings.
+
+
+
+
+
+
+ Specify number of days that we want to generate the report
+
+ Here the field Generate Report For(days) specifies the number of days that we want to generate the
+ report.
+
+
+
+
+
+
+ PDF Report Generation
+
+ Now the report is generated based on the conditions that we provided.
+
- An employee can send a maintenance request for work pieces of equipment through your website. An e-mail regarding the details of maintenance request will be sent to the employee's work e-mail. A new maintenance request will automatically be created by an employee inside the maintenance module. Only the users who are employees can send the maintenance requests.
-
-
-
-
-
Website Equipment Maintenance Request
-
-
-
- Request Equipment Maintenance from Website.
-
-
- Automatically creates Maintenance Request in backend.
-
-
- Sends e-mail of Maintenance Request details to employee.
-
-
-
-
-
-
-
Screenshots
-
-
-
-
-
-
-
-
After installation, just click on the maintenance menu on your website.
-
-
-
-
-
-
-
Fill in the details and click submit, you will be redirected to this page.
-
-
-
-
-
-
-
An e-mail will be sent to your work e-mail regarding the maintenance request details.
-
-
-
-
-
-
-
The request you sent will be created under new requests in maintenance module.
-
-
-
-
-
-
-
The maintenance request will be created under your name.
+ An employee can send a maintenance request for work pieces of equipment through your website. An
+ e-mail regarding the details of maintenance request will be sent to the employee's work e-mail. A
+ new maintenance request will automatically be created by an employee inside the maintenance module.
+ Only the users who are employees can send the maintenance requests.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+
+ Request Equipment Maintenance from Website.
+
+
+
+
+
+
+
+
+
+
+
+ Automatically creates Maintenance Request in backend.
+
+
+
+
+
+
+
+
+
+
+
+ Sends e-mail of Maintenance Request details to employee.
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ After installation, just click on the maintenance menu on your website.
+
+
+
+
+ Fill in the details and click submit, you will be redirected to this page.
+
+
+
+
+
+ An e-mail will be sent to your work e-mail regarding the maintenance request details.
+
+
+
+
+
+ The request you sent will be created under new requests in maintenance module.
+
+
+
+
+
+ The maintenance request will be created under your name.
+
+ This module brings you an XE Currency Converter featuring easy conversion of business currencies in
+ real-time. Convert your currencies by using the currency exchange platform xe.com