diff --git a/account_pdc/__init__.py b/account_pdc/__init__.py new file mode 100644 index 000000000..aa4ed3a7f --- /dev/null +++ b/account_pdc/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies(). +# Author: Fasluca() +# you can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (AGPL v3) along with this program. +# If not, see . +# +############################################################################## +from . import models diff --git a/account_pdc/__manifest__.py b/account_pdc/__manifest__.py new file mode 100644 index 000000000..fdb023811 --- /dev/null +++ b/account_pdc/__manifest__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies(). +# Author: Fasluca() +# you can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (AGPL v3) along with this program. +# If not, see . +# +############################################################################## +{ + 'name': 'PDC Management', + 'version': '12.0.1.0', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'http://www.cybrosys.com', + 'category': 'Accounting', + 'summary': 'Extension on Cheques to handle Post Dated Cheques', + 'description': """ Extension on Cheques to handle Post Dated Cheques """, + 'depends': ['account_check_printing'], + 'data': [ + 'data/account_pdc_data.xml', + 'views/account_payment_view.xml', + ], + 'images': ['static/description/pdc_banner.jpg'], + 'license': 'LGPL-3', + 'installable': True, + 'auto_install': False, +} diff --git a/account_pdc/data/account_pdc_data.xml b/account_pdc/data/account_pdc_data.xml new file mode 100644 index 000000000..54ec4ca7f --- /dev/null +++ b/account_pdc/data/account_pdc_data.xml @@ -0,0 +1,19 @@ + + + + + + PDC + pdc + inbound + + + PDC + pdc + outbound + + + + + + \ No newline at end of file diff --git a/account_pdc/models/__init__.py b/account_pdc/models/__init__.py new file mode 100644 index 000000000..50bcf54d5 --- /dev/null +++ b/account_pdc/models/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies(). +# Author: Fasluca() +# you can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (AGPL v3) along with this program. +# If not, see . +# +############################################################################## + +from . import account_journal +from . import account_payment diff --git a/account_pdc/models/account_journal.py b/account_pdc/models/account_journal.py new file mode 100644 index 000000000..451782691 --- /dev/null +++ b/account_pdc/models/account_journal.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies(). +# Author: Fasluca() +# you can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (AGPL v3) along with this program. +# If not, see . +# +############################################################################## + +from odoo import models, api, _ + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + @api.one + @api.depends('outbound_payment_method_ids') + def _compute_check_printing_payment_method_selected(self): + self.check_printing_payment_method_selected = any( + pm.code in ['check_printing', 'pdc'] for pm in self.outbound_payment_method_ids) + + @api.model + def _enable_pdc_on_bank_journals(self): + """ Enables check printing payment method and add a check sequence on bank journals. + Called upon module installation via data file. + """ + pdcin = self.env.ref('account_pdc.account_payment_method_pdc_in') + pdcout = self.env.ref('account_pdc.account_payment_method_pdc_out') + bank_journals = self.search([('type', '=', 'bank')]) + for bank_journal in bank_journals: + # bank_journal._create_check_sequence() + bank_journal.write({ + 'inbound_payment_method_ids': [(4, pdcin.id, None)], + 'outbound_payment_method_ids': [(4, pdcout.id, None)], + }) diff --git a/account_pdc/models/account_payment.py b/account_pdc/models/account_payment.py new file mode 100644 index 000000000..b4ff88123 --- /dev/null +++ b/account_pdc/models/account_payment.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies(). +# Author: Fasluca() +# you can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (AGPL v3) along with this program. +# If not, see . +# +############################################################################## + +from odoo import models, fields, api, _ +from odoo.exceptions import UserError + + +class AccountRegisterPayments(models.TransientModel): + _inherit = "account.register.payments" + + bank_reference = fields.Char(copy=False) + cheque_reference = fields.Char(copy=False) + effective_date = fields.Date('Effective Date', help='Effective date of PDC', copy=False, default=False) + + def get_payment_vals(self): + res = super(AccountRegisterPayments, self).get_payment_vals() + if self.payment_method_id == self.env.ref('account_check_printing.account_payment_method_check'): + res.update({ + 'check_amount_in_words': self.check_amount_in_words, + 'check_manual_sequencing': self.check_manual_sequencing, + 'effective_date': self.effective_date, + }) + return res + + +class AccountPayment(models.Model): + _inherit = "account.payment" + + bank_reference = fields.Char(copy=False) + cheque_reference = fields.Char(copy=False) + effective_date = fields.Date('Effective Date', help='Effective date of PDC', copy=False, default=False) + + @api.multi + def print_checks(self): + """ Check that the recordset is valid, set the payments state to sent and call print_checks() """ + # Since this method can be called via a client_action_multi, we need to make sure the received records are what we expect + self = self.filtered(lambda r: r.payment_method_id.code in ['check_printing', 'pdc'] and r.state != 'reconciled') + + if len(self) == 0: + raise UserError(_("Payments to print as a checks must have 'Check' or 'PDC' selected as payment method and " + "not have already been reconciled")) + if any(payment.journal_id != self[0].journal_id for payment in self): + raise UserError(_("In order to print multiple checks at once, they must belong to the same bank journal.")) + + if not self[0].journal_id.check_manual_sequencing: + # The wizard asks for the number printed on the first pre-printed check + # so payments are attributed the number of the check the'll be printed on. + last_printed_check = self.search([ + ('journal_id', '=', self[0].journal_id.id), + ('check_number', '!=', 0)], order="check_number desc", limit=1) + next_check_number = last_printed_check and last_printed_check.check_number + 1 or 1 + return { + 'name': _('Print Pre-numbered Checks'), + 'type': 'ir.actions.act_window', + 'res_model': 'print.prenumbered.checks', + 'view_type': 'form', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'payment_ids': self.ids, + 'default_next_check_number': next_check_number, + } + } + else: + self.filtered(lambda r: r.state == 'draft').post() + self.write({'state': 'sent'}) + return self.do_print_checks() + + + def _get_move_vals(self, journal=None): + """ Return dict to create the payment move + """ + journal = journal or self.journal_id + if not journal.sequence_id: + raise UserError(_('Configuration Error !'), + _('The journal %s does not have a sequence, please specify one.') % journal.name) + if not journal.sequence_id.active: + raise UserError(_('Configuration Error !'), _('The sequence of journal %s is deactivated.') % journal.name) + name = self.move_name or journal.with_context(ir_sequence_date=self.payment_date).sequence_id.next_by_id() + if self.payment_method_code =='pdc': + date = self.effective_date + else: + date = self.payment_date + return { + 'name': name, + 'date': date, + 'ref': self.communication or '', + 'company_id': self.company_id.id, + 'journal_id': journal.id, + } diff --git a/account_pdc/static/description/cybro_logo.png b/account_pdc/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/account_pdc/static/description/cybro_logo.png differ diff --git a/account_pdc/static/description/icon.png b/account_pdc/static/description/icon.png new file mode 100644 index 000000000..f47728351 Binary files /dev/null and b/account_pdc/static/description/icon.png differ diff --git a/account_pdc/static/description/index.html b/account_pdc/static/description/index.html new file mode 100644 index 000000000..140baa1e9 --- /dev/null +++ b/account_pdc/static/description/index.html @@ -0,0 +1,91 @@ +
+
+
+

PDC Management

+

Cybrosys Techno Solutions, www.cybrosys.com

+

...A simple way to handle Post Dated Cheques...

+
+
+
+ +
+
+
+

Configuration

+
+
Select PDC on Journal
+
+
+ +
+
+
+

As shown here, You have to select PDC to enable the PDC payment.This is only available with Journal of type 'Bank'

+
+
+
+ +
+
+
+

At The Time of Payment You Will Have

+
+
+
+ +
+
+
+

+

Payment form have two extra fields to put Bank and Cheque Detail.

+

+
+
+
+ +
+
+ +
+
+
+

+

When you select PDC, You have to put 'effective date' of PDC.

+

+
+
+
+ +
+

Need Any Help?

+ +
+ + + + + + + + diff --git a/account_pdc/static/description/pdc_banner.jpg b/account_pdc/static/description/pdc_banner.jpg new file mode 100644 index 000000000..4725892dd Binary files /dev/null and b/account_pdc/static/description/pdc_banner.jpg differ diff --git a/account_pdc/static/description/pdc_journal.png b/account_pdc/static/description/pdc_journal.png new file mode 100644 index 000000000..de3a74d44 Binary files /dev/null and b/account_pdc/static/description/pdc_journal.png differ diff --git a/account_pdc/static/description/pdc_payment.png b/account_pdc/static/description/pdc_payment.png new file mode 100644 index 000000000..6a0a8ae77 Binary files /dev/null and b/account_pdc/static/description/pdc_payment.png differ diff --git a/account_pdc/static/description/pdc_selected_payment.png b/account_pdc/static/description/pdc_selected_payment.png new file mode 100644 index 000000000..8425bf5b5 Binary files /dev/null and b/account_pdc/static/description/pdc_selected_payment.png differ diff --git a/account_pdc/views/account_payment_view.xml b/account_pdc/views/account_payment_view.xml new file mode 100644 index 000000000..aaa88c39f --- /dev/null +++ b/account_pdc/views/account_payment_view.xml @@ -0,0 +1,77 @@ + + + + account.payment.form.inherited + account.payment + + + + + + + + + + mrp.production.select + mrp.production + + + + + + + + + + Manufacturing Orders + ir.actions.act_window + mrp.production + form + tree,kanban,form,calendar,pivot,graph + + + {'search_default_todo': True} + +

+ Click to create a manufacturing order. +

+ A manufacturing order, based on a bill of materials, will + consume raw materials and produce finished products. +

+ Manufacturing orders are usually proposed automatically based + on customer requirements or automated rules like the minimum + stock rule. +

+
+
+ + +
diff --git a/product_deletion/README.rst b/product_deletion/README.rst new file mode 100644 index 000000000..c70042ae4 --- /dev/null +++ b/product_deletion/README.rst @@ -0,0 +1,12 @@ +Product Removal Authorisation v11 +================================= +User in the group "Product Deletion" can only delete the products. Those who are not in the +group cant delete the product. Odoo will raise a warning if the user in not in the group + +Credits +======= +Cybrosys Techno Solutions + +Contributors +------------ +* Niyas Raphy, Cybrosys \ No newline at end of file diff --git a/product_deletion/__init__.py b/product_deletion/__init__.py new file mode 100644 index 000000000..09e655a65 --- /dev/null +++ b/product_deletion/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy() +# you can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. +# If not, see . +# +############################################################################## +from . import models diff --git a/product_deletion/__manifest__.py b/product_deletion/__manifest__.py new file mode 100644 index 000000000..f9e22da7c --- /dev/null +++ b/product_deletion/__manifest__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy() +# you can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. +# If not, see . +# +############################################################################## +{ + 'name': 'Product Removal Authorisation', + 'summary': """Users in the Group "Product Deletion" Can Only Delete the Products""", + 'version': '12.0.1.0.0', + 'description': """Permission to delete the product""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'category': 'Warehouse', + 'depends': ['base', 'product'], + 'license': 'LGPL-3', + 'data': [ + 'views/product_deletion_group.xml', + ], + 'demo': [], + 'images': ['static/description/banner.jpg'], + 'installable': True, + 'auto_install': False, +} diff --git a/product_deletion/models/__init__.py b/product_deletion/models/__init__.py new file mode 100644 index 000000000..ca68981b6 --- /dev/null +++ b/product_deletion/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy() +# you can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. +# If not, see . +# +############################################################################## +from . import product_deletion diff --git a/product_deletion/models/product_deletion.py b/product_deletion/models/product_deletion.py new file mode 100644 index 000000000..7322c258d --- /dev/null +++ b/product_deletion/models/product_deletion.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy() +# you can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. +# If not, see . +# +############################################################################## +from odoo import models, api, _ +from odoo.exceptions import Warning + + +class ProductDeletion(models.Model): + _inherit = 'product.template' + + @api.multi + @api.model + def unlink(self, default=None): + res_user = self.env['res.users'].search([('id', '=', self._uid)]) + if not res_user.has_group('product_deletion.product_deletion_group'): + raise Warning(_( + "You cannot delete the product(s). Please contact the System Administrator")) + + diff --git a/product_deletion/static/description/banner.jpg b/product_deletion/static/description/banner.jpg new file mode 100644 index 000000000..1b584bfda Binary files /dev/null and b/product_deletion/static/description/banner.jpg differ diff --git a/product_deletion/static/description/cybro_logo.png b/product_deletion/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/product_deletion/static/description/cybro_logo.png differ diff --git a/product_deletion/static/description/deletion_warning.png b/product_deletion/static/description/deletion_warning.png new file mode 100644 index 000000000..7a56f304e Binary files /dev/null and b/product_deletion/static/description/deletion_warning.png differ diff --git a/product_deletion/static/description/icon.png b/product_deletion/static/description/icon.png new file mode 100644 index 000000000..08b687c4b Binary files /dev/null and b/product_deletion/static/description/icon.png differ diff --git a/product_deletion/static/description/index.html b/product_deletion/static/description/index.html new file mode 100644 index 000000000..6d3ca5ea7 --- /dev/null +++ b/product_deletion/static/description/index.html @@ -0,0 +1,48 @@ +
+
+

Product Removal Authorisation

+

Users having the permission can only delete the products

+

Cybrosys Technologies

+
+
+ +
+
+

Product Form

+
+

+ ☛ Only users in the group Product Deletion can delete the product.
+ ☛ If user is not in the group Odoo will raise a warning message.
+

+
+ +
+
+
+
+ +
+

Need Any Help?

+ +
diff --git a/product_deletion/views/product_deletion_group.xml b/product_deletion/views/product_deletion_group.xml new file mode 100644 index 000000000..2e03d7674 --- /dev/null +++ b/product_deletion/views/product_deletion_group.xml @@ -0,0 +1,10 @@ + + + + + + Product Deletion + + + + \ No newline at end of file diff --git a/task_deadline_reminder/README.rst b/task_deadline_reminder/README.rst new file mode 100644 index 000000000..71fe6ba03 --- /dev/null +++ b/task_deadline_reminder/README.rst @@ -0,0 +1,58 @@ +Task DeadLine Reminder v11 +========================== +This module extends the functionality of project module to allow to send deadline reminder emails on task deadline day. + +Configuration +============= + +By default, a cron job named "Task DeadLine Reminder" will be created while installing this module. +This cron job can be found in: + + **Settings > Technical > Automation > Scheduled Actions** + +This job runs daily by default. + +Usage +===== + +To use this functionality, you need to: + +#. Create a project to which the new tasks will be related. +#. Add a name, deadline date, who the task will be assigned to, etc... +#. In order to send email reminder to responsible user,you have to set reminder box (Project > Task > Reminder ) +#. Go to the Scheduled Action(Settings > Technical > Automation > Scheduled Action) and edit the time at which Deadline Reminder Action is to be done + +The cron job will do the rest. + +Installation +============ +- www.odoo.com/documentation/11.0/setup/install.html +- Install our custom addon + +Bug Tracker +=========== +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Credits +======= +Cybrosys Techno Solutions + +Author +------ +* Developer v9: Saritha @ cybrosys +* Developer v10, v11: Niyas Raphy @ cybrosys + +Maintainer +---------- + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com. + + + + + + + + diff --git a/task_deadline_reminder/__init__.py b/task_deadline_reminder/__init__.py new file mode 100644 index 000000000..167c5926c --- /dev/null +++ b/task_deadline_reminder/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +################################################################################### +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies ().# +# 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 models + + + diff --git a/task_deadline_reminder/__manifest__.py b/task_deadline_reminder/__manifest__.py new file mode 100755 index 000000000..3a8be384b --- /dev/null +++ b/task_deadline_reminder/__manifest__.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +################################################################################### +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies ().# +# 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': "Task Deadline Reminder", + 'version': "12.0.1.0.0", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'summary': '''Automatically Send Mail To Responsible User if Deadline Of Task is Today''', + 'description': '''Automatically Send Mail To Responsible User if Deadline Of Task is Today''', + 'category': "Project", + 'depends': ['project'], + 'license': 'AGPL-3', + 'data': [ + 'views/deadline_reminder_view.xml', + 'views/deadline_reminder_cron.xml', + 'data/deadline_reminder_action_data.xml' + ], + 'demo': [], + 'images': ['static/description/banner.jpg'], + 'installable': True, + 'auto_install': False +} diff --git a/task_deadline_reminder/data/deadline_reminder_action_data.xml b/task_deadline_reminder/data/deadline_reminder_action_data.xml new file mode 100644 index 000000000..37358154d --- /dev/null +++ b/task_deadline_reminder/data/deadline_reminder_action_data.xml @@ -0,0 +1,46 @@ + + + + + + Deadline Reminder...!! + ${object.company_id.name}<${object.company_id.email}> + ${object.user_id.email} + Today Due Task -${object.date_deadline or 'n/a' } + + + +
+

Hello ${object.user_id.name},

+

This Email Is To Remind You That You Have Task As Below Listed Which Are Due On Today.

+
+
+ + + + + + + + + + + + + + + + + + + +
TaskProjectDeadlineAssigned ToLink
${object.name}${object.project_id.name}${object.date_deadline}${object.user_id.name}View Now
+
+ + ]]> +
+
+ +
+
diff --git a/task_deadline_reminder/models/__init__.py b/task_deadline_reminder/models/__init__.py new file mode 100644 index 000000000..804dd48f7 --- /dev/null +++ b/task_deadline_reminder/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from . import deadline_reminder + + diff --git a/task_deadline_reminder/models/deadline_reminder.py b/task_deadline_reminder/models/deadline_reminder.py new file mode 100644 index 000000000..2f2dbb120 --- /dev/null +++ b/task_deadline_reminder/models/deadline_reminder.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +import datetime +from datetime import datetime +from odoo import SUPERUSER_ID +from odoo import api, fields, models, _ + + +class DeadLineReminder(models.Model): + _inherit = "project.task" + + task_reminder = fields.Boolean("Reminder") + + @api.model + def _cron_deadline_reminder(self): + su_id = self.env['res.partner'].browse(SUPERUSER_ID) + for task in self.env['project.task'].search([('date_deadline', '!=', None), + ('task_reminder', '=', True), ('user_id', '!=', None)]): + reminder_date = datetime.strptime(task.date_deadline, '%Y-%m-%d').date() + today = datetime.now().date() + if reminder_date == today and task: + template_id = self.env['ir.model.data'].get_object_reference( + 'task_deadline_reminder', + 'email_template_edi_deadline_reminder')[1] + if template_id: + email_template_obj = self.env['mail.template'].browse(template_id) + values = email_template_obj.generate_email(task.id, fields=None) + values['email_from'] = su_id.email + values['email_to'] = task.user_id.email + values['res_id'] = False + mail_mail_obj = self.env['mail.mail'] + msg_id = mail_mail_obj.create(values) + if msg_id: + msg_id.send() + return True + + diff --git a/task_deadline_reminder/static/description/banner.jpg b/task_deadline_reminder/static/description/banner.jpg new file mode 100644 index 000000000..998679818 Binary files /dev/null and b/task_deadline_reminder/static/description/banner.jpg differ diff --git a/task_deadline_reminder/static/description/cybro_logo.png b/task_deadline_reminder/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/task_deadline_reminder/static/description/cybro_logo.png differ diff --git a/task_deadline_reminder/static/description/icon.png b/task_deadline_reminder/static/description/icon.png new file mode 100644 index 000000000..1ff90030a Binary files /dev/null and b/task_deadline_reminder/static/description/icon.png differ diff --git a/task_deadline_reminder/static/description/index.html b/task_deadline_reminder/static/description/index.html new file mode 100644 index 000000000..05b294051 --- /dev/null +++ b/task_deadline_reminder/static/description/index.html @@ -0,0 +1,76 @@ + + + + +
+
+

Task DeadLine Reminder

+
+

+ This module send auto reminder to responsible user of task if deadline = Today. Cron job will + run everyday and search for task which due today and send reminder email to employee. +

+
+
+
+ +
+
+

Project Task Form - Configuration of Task Deadline Reminder

+
+

+ If set this box then only this task will be consider for reminder. +

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

Automation Scheduled Action - Cron Job

+
+
+ +
+
+
+
+ +
+
+

Email to User/Employee

+
+

+ View Now link will allow user to jump to related task directly. This email will group all tasks which are deadline today for that user and send summary table to user/employee by email. +

+
+
+
+ +
+
+
+
+
+

Need Any Help?

+ + +
+ + + diff --git a/task_deadline_reminder/static/description/mail.png b/task_deadline_reminder/static/description/mail.png new file mode 100644 index 000000000..1fa50b2c0 Binary files /dev/null and b/task_deadline_reminder/static/description/mail.png differ diff --git a/task_deadline_reminder/static/description/project_task_form.jpg b/task_deadline_reminder/static/description/project_task_form.jpg new file mode 100644 index 000000000..2cf1752f9 Binary files /dev/null and b/task_deadline_reminder/static/description/project_task_form.jpg differ diff --git a/task_deadline_reminder/static/description/scheduled_action_form.png b/task_deadline_reminder/static/description/scheduled_action_form.png new file mode 100644 index 000000000..099bfb24a Binary files /dev/null and b/task_deadline_reminder/static/description/scheduled_action_form.png differ diff --git a/task_deadline_reminder/views/deadline_reminder_cron.xml b/task_deadline_reminder/views/deadline_reminder_cron.xml new file mode 100644 index 000000000..1117f19b0 --- /dev/null +++ b/task_deadline_reminder/views/deadline_reminder_cron.xml @@ -0,0 +1,16 @@ + + + + + Task DeadLine Reminder + + code + model._cron_deadline_reminder() + + 1 + days + -1 + + + + diff --git a/task_deadline_reminder/views/deadline_reminder_view.xml b/task_deadline_reminder/views/deadline_reminder_view.xml new file mode 100644 index 000000000..3c150738e --- /dev/null +++ b/task_deadline_reminder/views/deadline_reminder_view.xml @@ -0,0 +1,17 @@ + + + + + + ProjectTaskRemainder + project.task + + + + + + + + + + \ No newline at end of file diff --git a/total_payable_receivable/README.rst b/total_payable_receivable/README.rst new file mode 100644 index 000000000..ae28a0217 --- /dev/null +++ b/total_payable_receivable/README.rst @@ -0,0 +1,11 @@ +Total Payable & Receivable v11 +============================== +This module will make total payable and receivable field in customer and vendor form + +Credits +======= +Cybrosys Techno Solutions + +Contributors +------------ +* Niyas Raphy, Cybrosys \ No newline at end of file diff --git a/total_payable_receivable/__init__.py b/total_payable_receivable/__init__.py new file mode 100644 index 000000000..414ca6fe8 --- /dev/null +++ b/total_payable_receivable/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy() +# you can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. +# If not, see . +# +############################################################################## diff --git a/total_payable_receivable/__manifest__.py b/total_payable_receivable/__manifest__.py new file mode 100644 index 000000000..bd678187c --- /dev/null +++ b/total_payable_receivable/__manifest__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Niyas Raphy() +# you can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# 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 +# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. +# If not, see . +# +############################################################################## +{ + 'name': 'Payable And Receivable Amount', + 'summary': """Amount Payable & Receivable In Partner Form""", + 'version': '12.0.1.0.0', + 'description': """Amount Payable & Receivable In Partner Form""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'category': 'Accounting', + 'depends': ['base'], + 'license': 'LGPL-3', + 'data': [ + 'views/total_payable_receivable_view.xml', + ], + 'demo': [], + 'images': ['static/description/banner.jpg'], + 'installable': True, + 'auto_install': False, +} diff --git a/total_payable_receivable/static/description/amount_total.png b/total_payable_receivable/static/description/amount_total.png new file mode 100644 index 000000000..cea76690b Binary files /dev/null and b/total_payable_receivable/static/description/amount_total.png differ diff --git a/total_payable_receivable/static/description/banner.jpg b/total_payable_receivable/static/description/banner.jpg new file mode 100644 index 000000000..64cbfeeb8 Binary files /dev/null and b/total_payable_receivable/static/description/banner.jpg differ diff --git a/total_payable_receivable/static/description/cybro_logo.png b/total_payable_receivable/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/total_payable_receivable/static/description/cybro_logo.png differ diff --git a/total_payable_receivable/static/description/icon.png b/total_payable_receivable/static/description/icon.png new file mode 100644 index 000000000..84c8b7f7f Binary files /dev/null and b/total_payable_receivable/static/description/icon.png differ diff --git a/total_payable_receivable/static/description/index.html b/total_payable_receivable/static/description/index.html new file mode 100644 index 000000000..873e976ea --- /dev/null +++ b/total_payable_receivable/static/description/index.html @@ -0,0 +1,47 @@ +
+
+

Payable And Receivable Amounts

+

It shows total payable & receivable amount in partner form

+

Cybrosys Technologies

+
+
+ +
+
+

Partner Form

+
+

+ ☛ Amount payable and receivable is shown in the partner form
+

+
+ +
+
+
+
+ +
+

Need Any Help?

+ +
diff --git a/total_payable_receivable/views/total_payable_receivable_view.xml b/total_payable_receivable/views/total_payable_receivable_view.xml new file mode 100644 index 000000000..f2437ff14 --- /dev/null +++ b/total_payable_receivable/views/total_payable_receivable_view.xml @@ -0,0 +1,18 @@ + + + + + res.partner + res.partner + + + + + + + + + + + +