@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import models |
@ -0,0 +1,41 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': 'PDC Management', |
|||
'version': '10.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/banner.jpg'], |
|||
'license': 'LGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,19 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
|
|||
<record id="account_payment_method_pdc_in" model="account.payment.method"> |
|||
<field name="name">PDC</field> |
|||
<field name="code">pdc</field> |
|||
<field name="payment_type">inbound</field> |
|||
</record> |
|||
<record id="account_payment_method_pdc_out" model="account.payment.method"> |
|||
<field name="name">PDC</field> |
|||
<field name="code">pdc</field> |
|||
<field name="payment_type">outbound</field> |
|||
</record> |
|||
|
|||
<!--<function model="account.journal" name="_enable_check_printing_on_bank_journals"/>--> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
import account_journal |
|||
import account_payment |
@ -0,0 +1,49 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
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)], |
|||
}) |
@ -0,0 +1,110 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
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, |
|||
} |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 8.6 KiB |
@ -0,0 +1,92 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">PDC Management</h2> |
|||
<h3 class="oe_slogan">...A simple way to handle Post Dated Checks...</h3> |
|||
<h4 class="oe_slogan">Cybrosys Techno Solutions, www.cybrosys.com</h4> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h3 class="oe_slogan">Configuration</h3> |
|||
</div> |
|||
<div class="oe_span8"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="pdc_config.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span4"> |
|||
<p class="oe_mt32"> |
|||
<p><b>Select PDC:</b></p> |
|||
<p>As shown here, You have to select PDC to enable the PDC payment.This is only available with Journal of type 'Bank'</p> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h3 class="oe_slogan">At The Time of Payment You Will Have</h3> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="pdc_payment.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span4"> |
|||
<p class="oe_mt32"> |
|||
<p>Payment form have two extra fields to put Bank and Check Detail.</p> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span4"> |
|||
<p class="oe_mt32"> |
|||
<p>When you select PDC, You have to put 'effective date' of PDC.</p> |
|||
</p> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="pdc_payment_eff.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<div> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
<div> |
|||
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
|||
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 59 KiB |
@ -0,0 +1,77 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<record id="account_check_printing.view_account_payment_form_inherited" model="ir.ui.view"> |
|||
<field name="name">account.payment.form.inherited</field> |
|||
<field name="model">account.payment</field> |
|||
<field name="inherit_id" ref="account.view_account_payment_form" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//button[@name='post']" position="before"> |
|||
<button name="print_checks" class="oe_highlight" attrs="{'invisible': ['|', ('payment_method_code', 'not in', ['check_printing','pdc']), ('state', '!=', 'posted')]}" string="Print Check" type="object"/> |
|||
<button name="unmark_sent" attrs="{'invisible': ['|', ('payment_method_code', 'not in', ['check_printing','pdc']), ('state', '!=', 'sent')]}" string="Unmark Sent" type="object"/> |
|||
</xpath> |
|||
<xpath expr="//div[@name='amount_div']" position="after"> |
|||
<field name="check_amount_in_words" attrs="{'invisible': [('payment_method_code', 'not in', ['check_printing','pdc'])], 'readonly': [('state', '!=', 'draft')]}" groups="base.group_no_one"/> |
|||
</xpath> |
|||
<xpath expr="//field[@name='communication']" position="after"> |
|||
<field name="check_manual_sequencing" invisible="1"/> |
|||
<field name="check_number" attrs="{'invisible': ['|', ('payment_method_code', 'not in', ['check_printing','pdc']), ('check_number', '=', 0)]}"/> |
|||
</xpath> |
|||
<xpath expr="//field[@name='payment_date']" position="after"> |
|||
<field name="effective_date" attrs="{'invisible': [('payment_method_code', '!=', 'pdc')],'required': [('payment_method_code', '=', 'pdc')]}"/> |
|||
<field name="bank_reference" attrs="{'readonly': [('state', '!=', 'draft')]}"/> |
|||
<field name="cheque_reference" attrs="{'readonly': [('state', '!=', 'draft')]}"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="account_check_printing.view_account_payment_invoice_form_inherited" model="ir.ui.view"> |
|||
<field name="name">account.payment.invoice.form.inherited</field> |
|||
<field name="model">account.payment</field> |
|||
<field name="inherit_id" ref="account.view_account_payment_invoice_form" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//div[@name='amount_div']" position="after"> |
|||
<field name="check_amount_in_words" attrs="{'invisible': [('payment_method_code', 'not in', ['check_printing','pdc'])]}" groups="base.group_no_one"/> |
|||
</xpath> |
|||
<xpath expr="//field[@name='communication']" position="after"> |
|||
<field name="check_manual_sequencing" invisible="1"/> |
|||
<field name="check_number" attrs="{'invisible': ['|', ('payment_method_code', 'not in', ['check_printing','pdc']), ('check_manual_sequencing', '=', False)]}"/> |
|||
</xpath> |
|||
<xpath expr="//field[@name='payment_date']" position="after"> |
|||
<field name="effective_date" attrs="{'invisible': [('payment_method_code', '!=', 'pdc')],'required': [('payment_method_code', '=', 'pdc')]}"/> |
|||
<field name="bank_reference" attrs="{'readonly': [('state', '!=', 'draft')]}"/> |
|||
<field name="cheque_reference" attrs="{'readonly': [('state', '!=', 'draft')]}"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="account_check_printing.view_account_payment_from_invoices_inherited" model="ir.ui.view"> |
|||
<field name="name">account.register.payments.wizard.inherited</field> |
|||
<field name="model">account.register.payments</field> |
|||
<field name="inherit_id" ref="account.view_account_payment_from_invoices" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='amount']" position="after"> |
|||
<field name="check_amount_in_words" attrs="{'invisible': [('payment_method_code', 'not in', ['check_printing','pdc'])]}" groups="base.group_no_one"/> |
|||
</xpath> |
|||
<xpath expr="//field[@name='communication']" position="after"> |
|||
<field name="check_manual_sequencing" invisible="1"/> |
|||
<field name="check_number" attrs="{'invisible': ['|', ('payment_method_code', 'not in', ['check_printing','pdc']), ('check_manual_sequencing', '=', False)]}"/> |
|||
</xpath> |
|||
<xpath expr="//field[@name='payment_date']" position="after"> |
|||
<field name="effective_date" attrs="{'invisible': [('payment_method_code', '!=', 'pdc')],'required': [('payment_method_code', '=', 'pdc')]}"/> |
|||
<field name="bank_reference" attrs="{'readonly': [('state', '!=', 'draft')]}"/> |
|||
<field name="cheque_reference" attrs="{'readonly': [('state', '!=', 'draft')]}"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="account_check_printing.view_payment_check_printing_search" model="ir.ui.view"> |
|||
<field name="name">account.payment.check.printing.search</field> |
|||
<field name="model">account.payment</field> |
|||
<field name="inherit_id" ref="account.view_account_payment_search"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//filter[@name='state_sent']" position="before"> |
|||
<filter string="Checks To Print" domain="[('payment_method_id.code', 'in', ['check_printing','pdc']), ('state','=','posted')]" name="checks_to_send"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import wizard |
|||
import report |
@ -0,0 +1,43 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': 'Payments Report', |
|||
'version': '10.0.1.0', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'http://www.cybrosys.com', |
|||
'category': 'Accounting', |
|||
'summary': 'Report of Payments with filter for PDC type', |
|||
'description': """ Report of Payments with filter for PDC type """, |
|||
'depends': ['account_check_printing', 'account_pdc'], |
|||
'data': [ |
|||
'data/account_pdc_data.xml', |
|||
'views/account_payment_view.xml', |
|||
'views/report_payment.xml', |
|||
'wizard/account_report_payment_view.xml', |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'LGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,3 @@ |
|||
# -*- coding: utf-8 -*- |
|||
import report_payment |
|||
|
@ -0,0 +1,60 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
import time |
|||
from odoo import api, models |
|||
import logging |
|||
|
|||
_logger = logging.getLogger(__name__) |
|||
|
|||
|
|||
class ReportPayment(models.AbstractModel): |
|||
_name = 'report.account_pdc.report_payment_template' |
|||
|
|||
def lines(self, payment_type, journal_ids, pdc_only, data): |
|||
domain = [] |
|||
if isinstance(journal_ids, int): |
|||
journal_ids = [journal_ids] |
|||
domain.append(('journal_id', 'in', journal_ids)) |
|||
if payment_type == 'inbound': |
|||
domain.append(('payment_type', '=', 'inbound')) |
|||
elif payment_type == 'outbound': |
|||
domain.append(('payment_type', '=', 'outbound')) |
|||
if data['form']['date_from']: |
|||
domain.append(('payment_date', '>=', data['form']['date_from'])) |
|||
if data['form']['date_to']: |
|||
domain.append(('payment_date', '<=', data['form']['date_to'])) |
|||
if data['form']['company_id']: |
|||
domain.append(('company_id', '=', data['form']['company_id'][0])) |
|||
if pdc_only: |
|||
domain.append(('payment_method_id.code', '=', 'pdc')) |
|||
if data['form']['effective_date_from']: |
|||
domain.append(('effective_date_from', '>=', data['form']['effective_date_from'])) |
|||
if data['form']['effective_date_to']: |
|||
domain.append(('effective_date_to', '<=', data['form']['effective_date_to'])) |
|||
|
|||
|
|||
return self.env['account.payment'].search(domain) |
|||
|
|||
|
|||
@api.model |
|||
def render_html(self, docids, data=None): |
|||
_logger.info("................................1..............................") |
|||
# target_move = data['form'].get('target_move', 'all') |
|||
# sort_selection = data['form'].get('sort_selection', 'date') |
|||
payment_type = data['form']['payment_type'] |
|||
pdc_only = data['form']['pdc_only'] |
|||
# effective_date_from = data['form']['effective_date_from'] |
|||
# effective_date_to = data['form']['effective_date_to'] |
|||
|
|||
res = {} |
|||
for journal in data['form']['journal_ids']: |
|||
res[journal] = self.with_context(data['form'].get('used_context', {})).lines(payment_type, journal, pdc_only, data) |
|||
docargs = { |
|||
'doc_ids': data['form']['journal_ids'], |
|||
'doc_model': self.env['account.journal'], |
|||
'data': data, |
|||
'docs': self.env['account.journal'].browse(data['form']['journal_ids']), |
|||
'time': time, |
|||
'lines': res, |
|||
} |
|||
return self.env['report'].render('account_pdc.report_payment_template', docargs) |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 8.6 KiB |
@ -0,0 +1,53 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Payments Report</h2> |
|||
<h3 class="oe_slogan">...A report of Payments with a filter for PDC...</h3> |
|||
<h4 class="oe_slogan">Cybrosys Techno Solutions, www.cybrosys.com</h4> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="pdc_report.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<div> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
<div> |
|||
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
|||
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
After Width: | Height: | Size: 59 KiB |
@ -0,0 +1,76 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<template id="report_payment_template"> |
|||
<t t-call="report.html_container"> |
|||
<t t-set="data_report_margin_top" t-value="12"/> |
|||
<t t-set="data_report_header_spacing" t-value="9"/> |
|||
<t t-set="data_report_dpi" t-value="110"/> |
|||
<t t-call="report.internal_layout"> |
|||
<div class="page"> |
|||
<h2>Payments Report</h2> |
|||
<div class="row mt32"> |
|||
<div class="col-xs-3"> |
|||
<strong>Company:</strong> |
|||
<p t-esc="res_company.name"/> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Journal:</strong> |
|||
<t t-foreach="docs" t-as="o"><span t-esc="o.name"/>,</t> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Payment Types</strong> |
|||
<p t-if="data['form']['payment_type'] == 'inbound'">Customer</p> |
|||
<p t-if="data['form']['payment_type'] == 'outbound'">Supplier</p> |
|||
<p t-if="data['form']['pdc_only'] == 1"> PDC only</p> |
|||
<p t-if="data['form']['payment_type'] == '' and data['form']['pdc_only'] == 0">ALL</p> |
|||
</div> |
|||
</div> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-if="lines[o.id]"> |
|||
<h4><t t-esc="o.name"/> Journal</h4> |
|||
<table class="table table-condensed"> |
|||
<thead> |
|||
<tr> |
|||
<th>Date</th> |
|||
<th>Name</th> |
|||
<th>Partner</th> |
|||
<th>Bank Ref.</th> |
|||
<th>Cheque Ref.</th> |
|||
<th>Amount</th> |
|||
<th>Effc. Date</th> |
|||
<th>State</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr t-foreach="lines[o.id]" t-as="ap"> |
|||
<td><span t-esc="ap.name"/></td> |
|||
<td><span t-field="ap.payment_date"/></td> |
|||
<td><span t-esc="ap.sudo().partner_id and ap.sudo().partner_id.name[:23] or ''"/></td> |
|||
<td><span t-field="ap.bank_reference"/></td> |
|||
<td><span t-field="ap.cheque_reference"/></td> |
|||
<td><span t-esc="ap.amount" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td> |
|||
<td><span t-field="ap.effective_date"/></td> |
|||
<td><span t-field="ap.state"/></td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
|
|||
</t> |
|||
</t> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<data> |
|||
<report |
|||
id="action_report_payment" |
|||
model="account.payment" |
|||
string="Payments Report" |
|||
report_type="qweb-pdf" |
|||
name="account_pdc.report_payment_template" |
|||
file="account_pdc.report_payment_template" |
|||
/> |
|||
</data> |
|||
|
|||
</odoo> |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import account_report_payment |
@ -0,0 +1,77 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from odoo import fields, models, api |
|||
|
|||
|
|||
class AccountReportPayment(models.TransientModel): |
|||
_name = "account.report.payment" |
|||
_description = "Account Payment Report" |
|||
|
|||
company_id = fields.Many2one('res.company', string='Company', readonly=True, default=lambda self: self.env.user.company_id) |
|||
date_from = fields.Date(string='Start Date') |
|||
date_to = fields.Date(string='End Date') |
|||
journal_ids = fields.Many2many('account.journal', string='Journals', required=True, |
|||
default=lambda self: self.env['account.journal'].search( |
|||
[('type', 'in', ['cash', 'bank'])])) |
|||
payment_type = fields.Selection([('inbound', 'Customer'), ('outbound', 'Supplier')], 'Payment Type') |
|||
pdc_only = fields.Boolean('PDC only') |
|||
effective_date_from = fields.Date('Effective Date From') |
|||
effective_date_to = fields.Date('Effective Date Upto') |
|||
|
|||
def _build_contexts(self, data): |
|||
result = {} |
|||
result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False |
|||
result['state'] = 'target_move' in data['form'] and data['form']['target_move'] or '' |
|||
result['date_from'] = data['form']['date_from'] or False |
|||
result['date_to'] = data['form']['date_to'] or False |
|||
result['payment_type'] = data['form']['payment_type'] or False |
|||
result['pdc_only'] = data['form']['pdc_only'] |
|||
if result['pdc_only']: |
|||
result['effective_date_from'] = data['form']['effective_date_from'] or False |
|||
result['effective_date_to'] = data['form']['effective_date_to'] or False |
|||
result['strict_range'] = True if result['date_from'] else False |
|||
return result |
|||
|
|||
@api.multi |
|||
def check_report(self): |
|||
self.ensure_one() |
|||
data = {} |
|||
data['ids'] = self.env.context.get('active_ids', []) |
|||
data['model'] = self.env.context.get('active_model', 'ir.ui.menu') |
|||
data['form'] = self.read(['date_from', 'date_to', 'journal_ids', 'payment_type', 'pdc_only', 'effective_date_from', 'effective_date_to', 'company_id'])[0] |
|||
used_context = self._build_contexts(data) |
|||
data['form']['used_context'] = dict(used_context, lang=self.env.context.get('lang', 'en_US')) |
|||
return self._print_report(data) |
|||
|
|||
def _print_report(self, data): |
|||
return self.env['report'].with_context(landscape=True).get_action(self, 'account_pdc.report_payment_template', data=data) |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,61 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
|
|||
<record id="account_report_payment_view" model="ir.ui.view"> |
|||
<field name="name">Payments Report</field> |
|||
<field name="model">account.report.payment</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Report Options"> |
|||
<group> |
|||
<group> |
|||
<field name="company_id" invisible="1"/> |
|||
<field name="payment_type"/> |
|||
</group> |
|||
<group> |
|||
<field name="date_from"/> |
|||
<field name="date_to"/> |
|||
</group> |
|||
</group> |
|||
<group> |
|||
<group> |
|||
<field name="pdc_only"/> |
|||
</group> |
|||
<group> |
|||
<field name="effective_date_from" attrs="{'invisible':[('pdc_only','!=',True)]}"/> |
|||
<field name="effective_date_to" attrs="{'invisible': [('pdc_only', '!=', True)]}"/> |
|||
</group> |
|||
</group> |
|||
<group> |
|||
|
|||
</group> |
|||
<group> |
|||
<field name="journal_ids" widget="many2many_tags" options="{'no_create': True}" domain="[('type', 'in', ('cash', 'bank'))]"/> |
|||
</group> |
|||
<footer> |
|||
<button name="check_report" string="Print" type="object" default_focus="1" class="oe_highlight"/> |
|||
or |
|||
<button string="Cancel" class="oe_link" special="cancel" /> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_account_report_payment_menu" model="ir.actions.act_window"> |
|||
<field name="name">Payments Report</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">account.report.payment</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">form</field> |
|||
<field name="view_id" ref="account_report_payment_view"/> |
|||
<field name="target">new</field> |
|||
</record> |
|||
|
|||
<menuitem |
|||
id="menu_print_payment" |
|||
name="Payments Report" |
|||
parent="account.menu_finance_legal_statement" |
|||
action="action_account_report_payment_menu" |
|||
groups="account.group_account_manager,account.group_account_user" |
|||
/> |
|||
|
|||
</odoo> |
@ -0,0 +1,34 @@ |
|||
Cab Booking Management System v10 |
|||
================================= |
|||
|
|||
This module was developed to manage the cab system.It helps booking the cab, maintains logs |
|||
and record every activity related to the cab management. |
|||
|
|||
Installation |
|||
============ |
|||
|
|||
Just select it from available modules to install it, there is no need to extra installations. |
|||
|
|||
Configuration |
|||
============= |
|||
|
|||
Nothing to configure. |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
To use this functionality, you need to: |
|||
#.First create cabs(Cab Management > Cabs) |
|||
#.Then,you need to set timing for each cabs( Cab management > Timing) |
|||
#.On clicking Booking menu( Cab management > Booking) ,you have option to select cabs based on your time and location |
|||
#. Email is sent,once your booking is confirmed |
|||
#.To get total expense,first you need to set maintenance form ( Cab management > Maintenance).In this form ,you can |
|||
select cab and date, and all total activity of that cab on that day is fetched here. |
|||
#.To get data's on maintenance form ,first you must book one cab |
|||
|
|||
|
|||
Credits |
|||
======= |
|||
Developer: Saritha @ cybrosys |
|||
Guidance: Nilmar Shereef @ cybrosys, shereef@cybrosys.in |
|||
|
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from . import models |
@ -0,0 +1,47 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': "Cab Booking Management System", |
|||
'summary': """Complete Cab Booking Management and its Related Records""", |
|||
'author': "Cybrosys Techno Solutions", |
|||
'website': "http://www.cybrosys.com", |
|||
'category': 'Industries', |
|||
'version': '10.0.1.0.0', |
|||
'depends': ['base', 'mail'], |
|||
'data': [ |
|||
'views/templates.xml', |
|||
'views/cab_log_view.xml', |
|||
'views/cab_conf_view.xml', |
|||
'views/cab_location_view.xml', |
|||
'views/cab_timing_view.xml', |
|||
'views/cab_booking_view.xml', |
|||
'views/cab_creation_view.xml', |
|||
'views/cab_maintanence_view.xml', |
|||
'security/ir.model.access.csv' |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': True, |
|||
} |
@ -0,0 +1,32 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from . import cab_creation |
|||
from . import cab_log |
|||
from . import cab_conf |
|||
from . import cab_booking |
|||
from . import cab_location |
|||
from . import cab_timing |
|||
from. import cab_maintanence |
|||
|
|||
|
@ -0,0 +1,52 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
from odoo import models, fields, api |
|||
from datetime import date |
|||
|
|||
|
|||
class CabBooking(models.Model): |
|||
_name = 'cab.booking' |
|||
_rec_name = 'booking_date' |
|||
|
|||
booking_date = fields.Date(string="Booking Date", default=date.today(), required=True) |
|||
cab_timing = fields.Many2one('cab.time', string="Timing", required=True) |
|||
cab_routes = fields.Many2one('cab.location', string="Route From", required=True) |
|||
cab_routes_to = fields.Many2one('cab.location', string="Route To", required=True) |
|||
seat_available = fields.One2many('cab.timing', compute="scheduled_details") |
|||
|
|||
@api.onchange('cab_routes', 'cab_timing', 'cab_routes_to') |
|||
def scheduled_details(self): |
|||
data = self.env['cab.timing'].search([('cab_route.name', '=', self.cab_routes.name), |
|||
('cab_time.name', '=', self.cab_timing.name), |
|||
('cab_route_to.name', '=', self.cab_routes_to.name)]) |
|||
self.seat_available = data |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,31 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
from odoo import models, fields |
|||
|
|||
|
|||
class CabConfiguration(models.Model): |
|||
_name = 'cab.configuration' |
|||
_rec_name = 'cab_manager' |
|||
|
|||
auto_approve = fields.Boolean(string="Auto Approve") |
|||
cab_manager = fields.Many2one('res.users', string='Manager', required=True) |
@ -0,0 +1,92 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from odoo import models, fields, api |
|||
from odoo.exceptions import UserError,ValidationError |
|||
|
|||
|
|||
class CabManagement(models.Model): |
|||
_name = 'cab.management' |
|||
|
|||
name = fields.Char(compute="complete_name_compute", string="Cab Name") |
|||
ref_name = fields.Char(string="Cab Name", required=True) |
|||
cab_image = fields.Binary(string='Image', store=True, attachment=True) |
|||
licence_plate = fields.Char(string="Licence Plate", required=True) |
|||
activity_period_from = fields.Date(string="Activity Period") |
|||
activity_period_to = fields.Date(string="To") |
|||
driver_plot = fields.Char(string="Driver Ploted") |
|||
cab_value = fields.Float(string="Cab Value") |
|||
cab_model = fields.Char(string="Cab Model") |
|||
cab_color = fields.Char(string="Cab Color") |
|||
aq_date = fields.Date(string="Aquisition Date") |
|||
chas_no = fields.Char(string="Chasis No") |
|||
odo_reading = fields.Float(string="Odometre Reading") |
|||
seating_capacity = fields.Integer(string="Seating Capacity", required=True) |
|||
fuel_type = fields.Char(string="Fuel Type") |
|||
related_log_details = fields.One2many('cab.log', string="Log Details", compute="auto_fetch_log_details") |
|||
total_log_details = fields.One2many('cab.maintanence', string='Total Expenses', compute="auto_fetch_total_details") |
|||
location_log_details = fields.One2many('cab.log', string="Location", compute="auto_fetch_location_details") |
|||
|
|||
@api.onchange('licence_plate') |
|||
def check_unique_constraint(self): |
|||
for records in self.env['cab.management'].search([]): |
|||
if self.licence_plate == records.licence_plate: |
|||
raise ValidationError("Record already exists and violates unique field constraint") |
|||
|
|||
@api.one |
|||
def complete_name_compute(self): |
|||
self.name = self.ref_name |
|||
if self.licence_plate: |
|||
self.name = str(self.licence_plate) + ' / ' + str(self.ref_name) |
|||
|
|||
@api.onchange('activity_period_from', 'activity_period_to') |
|||
def auto_fetch_log_details(self): |
|||
if self.activity_period_from and self.activity_period_to: |
|||
if self.activity_period_from <= self.activity_period_to: |
|||
data = self.env['cab.log'].search([("cab_log_date", ">=", self.activity_period_from), |
|||
("cab_log_date", "<=", self.activity_period_to)]) |
|||
self.related_log_details = data |
|||
else: |
|||
self.activity_period_to = 0 |
|||
raise UserError("Enter Valid Dates") |
|||
|
|||
@api.onchange('activity_period_from', 'activity_period_to') |
|||
def auto_fetch_total_details(self): |
|||
if self.activity_period_from and self.activity_period_to: |
|||
if self.activity_period_from <= self.activity_period_to: |
|||
data = self.env['cab.maintanence'].search([("cab_log_date", ">=", self.activity_period_from), |
|||
("cab_log_date", "<=", self.activity_period_to)]) |
|||
self.total_log_details = data |
|||
else: |
|||
raise UserError("Enter Valid Dates") |
|||
|
|||
@api.onchange('activity_period_from', 'activity_period_to') |
|||
def auto_fetch_location_details(self): |
|||
if self.activity_period_from and self.activity_period_to: |
|||
if self.activity_period_from <= self.activity_period_to: |
|||
data = self.env['cab.log'].search([("cab_log_date", ">=", self.activity_period_from), |
|||
("cab_log_date", "<=", self.activity_period_to)]) |
|||
self.location_log_details = data |
|||
else: |
|||
raise UserError("Enter Valid Dates") |
|||
|
@ -0,0 +1,14 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
from odoo import models, fields |
|||
|
|||
|
|||
class CabLocation(models.Model): |
|||
_name = 'cab.location' |
|||
|
|||
name = fields.Char(string='City', required=True) |
|||
cab_zip = fields.Char(string='ZIP') |
|||
cab_code = fields.Char(string='City Code', size=64, help="The official code for the city") |
|||
state_id = fields.Many2one('res.country.state', string='State', required=True) |
|||
country_id = fields.Many2one('res.country', string='Country', required=True) |
|||
|
@ -0,0 +1,163 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from odoo import models, fields, api, _ |
|||
from odoo.exceptions import ValidationError |
|||
from datetime import date |
|||
|
|||
|
|||
class CabLog(models.Model): |
|||
_name = 'cab.log' |
|||
_inherit = ['mail.thread', 'ir.needaction_mixin'] |
|||
_description = 'Cab' |
|||
|
|||
name = fields.Many2one('cab.management', string="Name", store=True, required=True) |
|||
cab_log_date = fields.Date(string="Date", default=date.today(), required=True) |
|||
fuel_used = fields.Float(string="Fuel Used", required=True, help="To get total fuel used in Litre") |
|||
seat_capacity = fields.Integer(string="Seat Capacity", related="name.seating_capacity") |
|||
seat_available = fields.Integer(string="Seat Available") |
|||
cab_location = fields.Char(string="Destination Point", required=True) |
|||
cab_location_from = fields.Char(string="Starting Point", required=True) |
|||
seat_booked = fields.Integer(string="How many seats you need to book?", required=True) |
|||
odo_metre = fields.Float(string="OdoMetre Reading", required=True, help="Total distance covered in Km") |
|||
cab_expense = fields.Float(string="Expense", required=True) |
|||
cab_log_timing = fields.Many2one('cab.time', string="Time", required=True) |
|||
total_passenger = fields.Integer(string="Total Passenger", required=True) |
|||
partner_id = fields.Many2one('res.users', string="Customer Name", required=True) |
|||
cab_image = fields.Binary(string='Image', store=True, attachment=True) |
|||
state = fields.Selection([ |
|||
('draft', 'Draft'), |
|||
('approved', 'Approved'), |
|||
('discard', 'Discard'), |
|||
('cancel', 'Cancelled'), |
|||
('done', 'Done') |
|||
], default='draft') |
|||
|
|||
@api.onchange('name') |
|||
def change_location(self): |
|||
for records in self.env['cab.timing'].search([('name.name', '=', self.name.name)]): |
|||
if self.name.name == records.name.name: |
|||
self.cab_location = records.cab_route_to.name |
|||
self.cab_location_from = records.cab_route.name |
|||
|
|||
@api.one |
|||
@api.constrains('cab_log_timing') |
|||
def change_time(self): |
|||
for records in self.env['cab.timing'].search([('name.name', '=', self.name.name)]): |
|||
if self.cab_log_timing: |
|||
if self.cab_log_timing not in records.cab_time: |
|||
raise ValidationError("No cabs available at given time") |
|||
|
|||
@api.one |
|||
@api.constrains('seat_booked') |
|||
def error_message(self): |
|||
if self.seat_available < self.seat_booked: |
|||
raise ValidationError("No Available Seats") |
|||
elif self.seat_booked != self.total_passenger: |
|||
raise ValidationError("No of seat requested for booking and total passenger must be equal") |
|||
|
|||
@api.onchange('seat_booked') |
|||
def change_total_passenger(self): |
|||
self.total_passenger = self.seat_booked |
|||
|
|||
@api.one |
|||
def action_approve(self): |
|||
self.state = "approved" |
|||
|
|||
@api.one |
|||
def action_cancel(self): |
|||
self.state = "cancel" |
|||
|
|||
@api.one |
|||
def action_discard(self): |
|||
self.state = "discard" |
|||
|
|||
@api.onchange('cab_log_date', 'state') |
|||
def auto_cabs_approve(self): |
|||
for data in self.env['cab.configuration'].search([]): |
|||
if data.auto_approve != False: |
|||
user_obj = self.env.user |
|||
if user_obj == data.cab_manager: |
|||
self.state = 'approved' |
|||
|
|||
@api.onchange('cab_log_date', 'name', 'cab_log_timing') |
|||
def change_available_seat(self): |
|||
for data in self.env['cab.management'].search([('name', '=', self.name.name)]): |
|||
flag = 0 |
|||
total_seat_booked = 0 |
|||
for records in self.env['cab.log'].search([('name.name', '=', data.name)]): |
|||
if self.cab_log_date == records.cab_log_date and self.cab_log_timing == records.cab_log_timing: |
|||
if self.cab_location == records.cab_location and self.cab_location_from == records.cab_location_from: |
|||
total_seat_booked = total_seat_booked+records.seat_booked |
|||
flag += 1 |
|||
if flag > 0: |
|||
test_val = self.seat_capacity - total_seat_booked |
|||
self.seat_available = test_val |
|||
|
|||
else: |
|||
self.seat_available = self.seat_capacity |
|||
|
|||
@api.multi |
|||
def action_sent(self): |
|||
self.ensure_one() |
|||
ir_model_data = self.env['ir.model.data'] |
|||
try: |
|||
template_id = ir_model_data.get_object_reference('cab_booking_management', 'email_template_edi_cab')[1] |
|||
except ValueError: |
|||
template_id = False |
|||
try: |
|||
compose_form_id = ir_model_data.get_object_reference('mail', 'email_compose_message_wizard_form')[1] |
|||
except ValueError: |
|||
compose_form_id = False |
|||
ctx = dict() |
|||
ctx.update({ |
|||
'default_model': 'cab.log', |
|||
'default_res_id': self.ids[0], |
|||
'default_use_template': bool(template_id), |
|||
'default_template_id': template_id, |
|||
'default_composition_mode': 'comment', |
|||
}) |
|||
return { |
|||
'type': 'ir.actions.act_window', |
|||
'view_type': 'form', |
|||
'view_mode': 'form', |
|||
'res_model': 'mail.compose.message', |
|||
'views': [(compose_form_id, 'form')], |
|||
'view_id': compose_form_id, |
|||
'target': 'new', |
|||
'context': ctx, |
|||
} |
|||
|
|||
|
|||
class MailComposeMessage(models.TransientModel): |
|||
_inherit = 'mail.compose.message' |
|||
|
|||
@api.multi |
|||
def send_mail(self, auto_commit=False): |
|||
if self._context.get('default_model') == 'cab.log' and self._context.get('default_res_id'): |
|||
order = self.env['cab.log'].browse([self._context['default_res_id']]) |
|||
if order.state == 'approved': |
|||
order.state = 'done' |
|||
order.sent = True |
|||
self = self.with_context(mail_post_autofollow=True) |
|||
return super(MailComposeMessage, self).send_mail(auto_commit=auto_commit) |
@ -0,0 +1,55 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from odoo import models, fields, api |
|||
|
|||
|
|||
class CabMaintanence(models.Model): |
|||
_name = 'cab.maintanence' |
|||
|
|||
name = fields.Many2one('cab.management', string="Name", required=True) |
|||
cab_log_date = fields.Date(string="Date", required=True) |
|||
fuel_used = fields.Float(string="Fuel Used") |
|||
odo_metre = fields.Float(string="OdoMetre Reading") |
|||
cab_expense = fields.Float(string="Expense") |
|||
total_passenger = fields.Integer(string="Total Passenger") |
|||
|
|||
@api.onchange('cab_log_date') |
|||
def total_log_details(self): |
|||
total_fuel = 0 |
|||
odo_metres = 0 |
|||
expense = 0 |
|||
passenger = 0 |
|||
for data in self.env['cab.log'].search([]): |
|||
if data.cab_log_date == self.cab_log_date: |
|||
total_fuel += data.fuel_used |
|||
odo_metres += data.odo_metre |
|||
expense += data.cab_expense |
|||
passenger += data.total_passenger |
|||
self.fuel_used = total_fuel |
|||
self.odo_metre = odo_metres |
|||
self.cab_expense = expense |
|||
self.total_passenger = passenger |
|||
|
|||
|
|||
|
@ -0,0 +1,56 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
from odoo import models, fields, api |
|||
|
|||
|
|||
class CabTiming(models.Model): |
|||
_name = 'cab.timing' |
|||
|
|||
name = fields.Many2one('cab.management', string="Cab Name", required=True) |
|||
cab_time = fields.Many2many('cab.time', 'cab_name_rel', string="Time", required=True, |
|||
help="Use this format 00:00,ex: 01:15") |
|||
cab_route = fields.Many2one('cab.location', string='Starting Place', required=True) |
|||
cab_route_to = fields.Many2one('cab.location', string='Destination Place', required=True) |
|||
seat = fields.Integer(string="Seating Capacity", related='name.seating_capacity', required=True) |
|||
|
|||
@api.multi |
|||
def action_log_form_view(self): |
|||
return { |
|||
'name': 'CabLog', |
|||
'view_type': 'form', |
|||
'view_mode': 'form', |
|||
'res_model': 'cab.log', |
|||
'type': 'ir.actions.act_window', |
|||
'target': 'current' |
|||
} |
|||
|
|||
|
|||
class Time(models.Model): |
|||
_name = 'cab.time' |
|||
|
|||
name = fields.Char(string="Name", required=True, help="Use this format 00:00,ex: 01:15") |
|||
|
|||
|
|||
|
|||
|
|||
|
After Width: | Height: | Size: 298 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,177 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Cab Booking Management System (CBMS)</h2> |
|||
<h3 class="oe_slogan">Manage the cabs with ease</h3> |
|||
<h4 class="oe_slogan">Cybrosys Technologies , www.cybrosys.com</h4> |
|||
<div> |
|||
<h4><p>Major Features:</p></h4> |
|||
<ul> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Booking the Cab.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Auto approval Settings in Configuration.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Cab Logs for Every Trip.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Record Every Activity Related to CBMS.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Email Notification for Successful Booking.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Booking Status.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> View All Cab Activities with Advanced Filttrations.</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="cab_creation.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_space"> |
|||
<h3 class="oe_slogan">Cab Booking</h3> |
|||
<div class="oe_span6"> |
|||
<p class='oe_mt32'> |
|||
<centre>We can book cabs from list of cabs based on your time and location.</centre> |
|||
</p> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="cab_booking.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan"> Auto approval</h3> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="cab_conf.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<p class='oe_mt32'> |
|||
Approve cab booking automatically. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container dark"> |
|||
<div class="oe_row oe_space"> |
|||
<h3 class="oe_slogan"> Cab Logs for Every Trip</h3> |
|||
<div class="oe_span6"> |
|||
<p class='oe_mt32'> |
|||
It keep the record of all expenses of each cab trips. |
|||
</p> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="log_details.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan"> Record Every Activity Related to CBMS</h3> |
|||
<div class="oe_span12"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="cab_activity.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<p class='oe_mt32'> |
|||
It shows the total expenses for a cab, on daily basis. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_space"> |
|||
<h3 class="oe_slogan"> Email Notification for Successful Booking.</h3> |
|||
<div class="oe_span6"> |
|||
<p class='oe_mt32'> |
|||
Email is sent to the user on successful booking of cab. |
|||
</p> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="mail.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Booking Status</h3> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="cab_cancel.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<p class='oe_mt32'> |
|||
View your status of booking.You can also cancel your booking. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_space"> |
|||
<h3 class="oe_slogan"> Cab Maintenance</h3> |
|||
<div class="oe_span6"> |
|||
<p class='oe_mt32'> |
|||
It shows the total expenses for a cab, on daily basis. |
|||
</p> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="cab_maintain.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row"> |
|||
<h3 class="oe_slogan">View All Cab Activities with Advanced Filttrations</h3> |
|||
<div class="oe_span12"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="cab_details.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >You Looking for a free Documentation of this Application.?</h2> |
|||
<h3 class="oe_slogan">Give a Request Mail to: <i class="fa fa-envelope" aria-hidden="true"></i> <a href="#" style="color:blue;">odoo@cybrosys.com</a></h3> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
</section> |
|||
|
|||
|
|||
|
|||
|
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 25 KiB |
@ -0,0 +1,71 @@ |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record model="ir.ui.view" id="cab_booking_form_view"> |
|||
<field name="name">Cab Booking</field> |
|||
<field name="model">cab.booking</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Cab Management"> |
|||
<header> |
|||
<html> |
|||
<div style="text-align: center;"> |
|||
<h1><centre>BOOK YOUR CAB</centre> </h1> |
|||
</div> |
|||
</html> |
|||
</header> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="booking_date"/> |
|||
</group> |
|||
<group> |
|||
<field name="cab_timing" style="width:50%%"/> |
|||
</group> |
|||
</group> |
|||
<group> |
|||
<label for="cab_routes" class="oe_inline"/> |
|||
<div > |
|||
<field name="cab_routes" class="oe_inline"/> to |
|||
<field name="cab_routes_to" class="oe_inline"/> |
|||
</div> |
|||
</group> |
|||
<field name="seat_available"> |
|||
<tree name="Cab InformationTree" editable="bottom"> |
|||
<field name="name"/> |
|||
<field name="seat" style="text-align: center;"/> |
|||
<button name="action_log_form_view" type="object" icon="fa-arrow-right" /> |
|||
</tree> |
|||
</field> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="cab_booking_tree_view"> |
|||
<field name="name">Cab Booking</field> |
|||
<field name="model">cab.booking</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Cab Booking"> |
|||
<field name="booking_date"/> |
|||
<field name="cab_routes"/> |
|||
<field name="cab_timing"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.actions.act_window" id="cab_booking_action"> |
|||
<field name="name">Cab Booking</field> |
|||
<field name="res_model">cab.booking</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form,calender</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create">Create Your First Booking |
|||
</p> |
|||
</field> |
|||
</record> |
|||
|
|||
<menuitem id="cab_booking_menu" name="Booking" parent="cab_management_menu" action="cab_booking_action" |
|||
groups="base.group_user" sequence="60"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,55 @@ |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="cab_management_group" model="res.groups"> |
|||
<field name="name">Cab Management</field> |
|||
<field name="category_id" ref="base.module_category_extra"/> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="cab_configuration_form_view"> |
|||
<field name="name">Cab Config</field> |
|||
<field name="model">cab.configuration</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Cab Configuration"> |
|||
<sheet> |
|||
<group string="Cab Configuration"> |
|||
<group> |
|||
<field name="auto_approve"/> |
|||
</group> |
|||
<group> |
|||
<field name="cab_manager"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="cab_conf_tree_view"> |
|||
<field name="name">Cab Config</field> |
|||
<field name="model">cab.configuration</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Cab Conf"> |
|||
<field name="auto_approve"/> |
|||
<field name="cab_manager"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.actions.act_window" id="cab_configuration_action"> |
|||
<field name="name">Cab Configuration</field> |
|||
<field name="res_model">cab.configuration</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create">Create the Conf |
|||
</p> |
|||
</field> |
|||
</record> |
|||
|
|||
<menuitem id="main_cab_configuration_menu" name="Configuration" parent="main_cab_management_menu"/> |
|||
<menuitem id="cab_configuration_menu" name="Cab Configuration" parent="main_cab_configuration_menu" |
|||
action="cab_configuration_action" groups="base.group_user"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,147 @@ |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record model="ir.ui.view" id="cab_management_form_view"> |
|||
<field name="name">Cab Details</field> |
|||
<field name="model">cab.management</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Cab Management"> |
|||
<sheet> |
|||
<field name="cab_image" widget="image" class="oe_avatar"/> |
|||
<div class="oe_title"> |
|||
<label for="name"/> |
|||
<h1> |
|||
<field name="ref_name" placeholder=" Vehicle Name" style="width:50%%"/> |
|||
<field name="name" invisible="1"/> |
|||
</h1> |
|||
<label for="licence_plate"/> |
|||
<h2> |
|||
<field name="licence_plate" style="width:25%%"/> |
|||
</h2> |
|||
</div> |
|||
<div class="oe_title"> |
|||
<group > |
|||
<label for="activity_period_from" class="oe_inline"/> |
|||
<div > |
|||
<field name="activity_period_from" class="oe_inline"/> to |
|||
<field name="activity_period_to" class="oe_inline"/> |
|||
</div> |
|||
|
|||
</group> |
|||
</div> |
|||
<label for="related_log_details"/> |
|||
<field name="related_log_details"> |
|||
<tree name="Cab Log Tree"> |
|||
<field name="cab_log_date"/> |
|||
<field name="cab_log_timing"/> |
|||
<field name="odo_metre"/> |
|||
<field name="fuel_used"/> |
|||
<field name="total_passenger"/> |
|||
</tree> |
|||
</field> |
|||
|
|||
<notebook> |
|||
<page string="Cab Details"> |
|||
<group> |
|||
<group> |
|||
<field name="driver_plot"/> |
|||
<field name="cab_value"/> |
|||
<field name="cab_model"/> |
|||
<field name="cab_color"/> |
|||
<field name="aq_date"/> |
|||
</group> |
|||
<group> |
|||
<field name="chas_no"/> |
|||
<field name="odo_reading"/> |
|||
<field name="seating_capacity"/> |
|||
<field name="fuel_type"/> |
|||
</group> |
|||
</group> |
|||
</page> |
|||
<page string="Location"> |
|||
<label for="location_log_details"/> |
|||
<field name="location_log_details"> |
|||
<tree> |
|||
<field name="cab_log_date"/> |
|||
<field name="cab_location"/> |
|||
<field name="partner_id"/> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
<page string="Total Activity"> |
|||
<label for="total_log_details"/> |
|||
<field name="total_log_details"> |
|||
<tree> |
|||
<field name="cab_log_date"/> |
|||
<field name="fuel_used"/> |
|||
<field name="odo_metre"/> |
|||
<field name="total_passenger"/> |
|||
<field name="cab_expense"/> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="cab_template_kanban_view" model="ir.ui.view"> |
|||
<field name="name">cab.management.kanban</field> |
|||
<field name="model">cab.management</field> |
|||
<field name="arch" type="xml"> |
|||
<kanban> |
|||
<field name="cab_image" modifiers="{}"/> |
|||
<templates> |
|||
<t t-name="kanban-box"> |
|||
<div class="oe_kanban_global_click"> |
|||
<div class="o_kanban_image"> |
|||
<img t-att-src="kanban_image('cab.management', 'cab_image', record.id.value)"/> |
|||
</div> |
|||
<div class="oe_kanban_details"> |
|||
<strong> |
|||
<span t-if="record.licence_plate.value">[<field name="licence_plate"/>]</span> |
|||
<ul> |
|||
<li>Name :<field name="name"/></li> |
|||
<li>O.M Reading : 0</li> |
|||
</ul> |
|||
</strong> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</templates> |
|||
</kanban> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="cab_template_action" model="ir.actions.act_window"> |
|||
<field name="name">Cab Details</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">cab.management</field> |
|||
<field name="view_mode">kanban,tree,form</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_id" ref="cab_template_kanban_view"/> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create"> |
|||
Click to define a new Cab. |
|||
</p> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.actions.act_window" id="cab_management_action"> |
|||
<field name="name">Cab Details</field> |
|||
<field name="res_model">cab.management</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">kanban,tree,form,calender</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create">Create Your First Cab |
|||
</p> |
|||
</field> |
|||
</record> |
|||
|
|||
<menuitem id="main_cab_management_menu" name="Cab Management"/> |
|||
<menuitem id="cab_management_menu" name="Cab Management" parent="main_cab_management_menu"/> |
|||
<menuitem id="cab_menu" name="Cab" parent="cab_management_menu" action="cab_management_action" |
|||
groups="base.group_user" sequence="10"/> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,57 @@ |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record model="ir.ui.view" id="cab_location_form_view"> |
|||
<field name="name">Location</field> |
|||
<field name="model">cab.location</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Cab Location"> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="name"/> |
|||
<field name="state_id"/> |
|||
<field name="cab_code"/> |
|||
</group> |
|||
<group> |
|||
<field name="cab_zip"/> |
|||
<field name="country_id"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
|
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="cab_location_tree_view"> |
|||
<field name="name">Location</field> |
|||
<field name="model">cab.location</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Cab Location"> |
|||
<field name="name"/> |
|||
<field name="state_id"/> |
|||
<field name="cab_code"/> |
|||
<field name="cab_zip"/> |
|||
<field name="country_id"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.actions.act_window" id="cab_location_action"> |
|||
<field name="name">Location</field> |
|||
<field name="res_model">cab.location</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form,calender</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create">Create Your First Location |
|||
</p> |
|||
</field> |
|||
</record> |
|||
<menuitem id="main_cab_management_menu" name="Cab Management"/> |
|||
<menuitem id="cab_management_menu" name="Cab Management" parent="main_cab_management_menu"/> |
|||
<menuitem id="cab_location_menu" name="Location" parent="cab_management_menu" action="cab_location_action" |
|||
groups="base.group_user" sequence="40"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,109 @@ |
|||
<odoo> |
|||
<data> |
|||
<record model="ir.ui.view" id="cab_log_form_view"> |
|||
<field name="name">Cab Details</field> |
|||
<field name="model">cab.log</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Cab Log"> |
|||
<header> |
|||
<button name="action_cancel" |
|||
string="Cancel Booking" |
|||
type="object" |
|||
state="'draft" |
|||
class="oe_highlight" |
|||
attrs = "{'invisible': [('state', 'in', ('approved','draft','discard','cancel'))]}"/> |
|||
|
|||
<button name="action_approve" |
|||
string="Approve" |
|||
type="object" |
|||
state="'draft" |
|||
class="oe_highlight" |
|||
attrs = "{'invisible': [('state', 'in', ('discard','approved','cancel','done'))]}"/> |
|||
<button name="action_sent" |
|||
string="Send Mail" |
|||
type="object" |
|||
class="oe_highlight" |
|||
context="{'send_rfq':True }" |
|||
attrs = "{'invisible': [('state', 'in', ('discard','draft','cancel','done'))]}" /> |
|||
<button name="action_discard" |
|||
string="Discard" |
|||
type="object" |
|||
class="oe_highlight" |
|||
attrs = "{'invisible': [('state', 'in', ('approved','discard','cancel','sent','done'))]}" /> |
|||
<field name="state" |
|||
widget="statusbar" |
|||
statusbar_visible="draft,approved,sent,discard,cancel" |
|||
statusbar_colors='{"approved":"red"}'/> |
|||
</header> |
|||
<sheet> |
|||
<field name="cab_image" |
|||
widget="image" |
|||
class="oe_avatar"/> |
|||
<div class="oe_title"> |
|||
<label for="name"/> |
|||
<h1> |
|||
<field name="name" placeholder=" Cab Name" style="width:50%%" /> |
|||
</h1> |
|||
</div> |
|||
<group> |
|||
<group> |
|||
<field name="cab_log_date"/> |
|||
<field name="partner_id"/> |
|||
<field name="cab_log_timing" style="width:50%%"/> |
|||
<field name="cab_location_from" style="width:50%%"/> |
|||
<field name="cab_location" style="width:50%%"/> |
|||
<field name="seat_capacity" invisible="1"/> |
|||
</group> |
|||
<group> |
|||
<field name="seat_available"/> |
|||
<field name="seat_booked" attrs="{'readonly':['|',('seat_available', '==', 0) ] }"/> |
|||
<field name="fuel_used"/> |
|||
<field name="odo_metre"/> |
|||
<field name="cab_expense"/> |
|||
<field name="total_passenger" invisible="1"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="cab_log_tree_view"> |
|||
<field name="name">Log Details</field> |
|||
<field name="model">cab.log</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Cab Log"> |
|||
<field name="name"/> |
|||
<field name="seat_available"/> |
|||
<field name="cab_log_date"/> |
|||
<field name="cab_log_timing"/> |
|||
<field name="cab_location_from"/> |
|||
<field name="cab_location"/> |
|||
<field name="odo_metre"/> |
|||
<field name="fuel_used"/> |
|||
<field name="cab_expense"/> |
|||
<field name="partner_id"/> |
|||
<field name="seat_booked"/> |
|||
<field name="state"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.actions.act_window" id="cab_log_action"> |
|||
<field name="name">Log Details</field> |
|||
<field name="res_model">cab.log</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form,calender</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create">Create Your First Trip |
|||
</p> |
|||
</field> |
|||
</record> |
|||
|
|||
<menuitem id="main_cab_management_menu" name="Cab Management"/> |
|||
<menuitem id="cab_management_menu" name="Cab Management" parent="main_cab_management_menu"/> |
|||
<menuitem id="cabs_log_menu" name="Cab Trip" parent="cab_management_menu" action="cab_log_action" |
|||
groups="base.group_user" sequence="30"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,68 @@ |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record model="ir.ui.view" id="cab_maintanence_form_view"> |
|||
<field name="name">Cab Details</field> |
|||
<field name="model">cab.maintanence</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Cab Log"> |
|||
<header> |
|||
<html> |
|||
<div style="text-align: center;"> |
|||
<h1><centre>Cab Maintanence(Total Expenses)</centre> </h1> |
|||
</div> |
|||
</html> |
|||
</header> |
|||
<sheet> |
|||
<div class="oe_title"> |
|||
<label for="name"/> |
|||
<h1> |
|||
<field name="name" placeholder=" Cab Name" style="width:50%%" /> |
|||
</h1> |
|||
</div> |
|||
<group> |
|||
<group> |
|||
<field name="cab_log_date"/> |
|||
<field name="fuel_used"/> |
|||
</group> |
|||
<group> |
|||
<field name="odo_metre"/> |
|||
<field name="cab_expense"/> |
|||
<field name="total_passenger"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="cab_maintanence_tree_view"> |
|||
<field name="name">Log Details</field> |
|||
<field name="model">cab.maintanence</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Cab Log"> |
|||
<field name="name"/> |
|||
<field name="odo_metre"/> |
|||
<field name="cab_log_date"/> |
|||
<field name="fuel_used"/> |
|||
<field name="cab_expense"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.actions.act_window" id="cab_maintanence_action"> |
|||
<field name="name">Log Details</field> |
|||
<field name="res_model">cab.maintanence</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form,calender</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create">Create Your First Record |
|||
</p> |
|||
</field> |
|||
</record> |
|||
|
|||
<menuitem id="cab_maintanence_menu" name="Maintenance" parent="cab_management_menu" |
|||
action="cab_maintanence_action" groups="base.group_user" sequence="20"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,63 @@ |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record model="ir.ui.view" id="cab_timing_form_view"> |
|||
<field name="name">Cab Timing</field> |
|||
<field name="model">cab.timing</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Cab Timing"> |
|||
<header> |
|||
<html> |
|||
<div style="text-align: center;"> |
|||
<h1><centre>Set Your Cab Time</centre> </h1> |
|||
</div> |
|||
</html> |
|||
</header> |
|||
|
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="name"/> |
|||
<field name="cab_route" style="width:50%%"/> |
|||
<field name="cab_route_to" style="width:50%%"/> |
|||
</group> |
|||
<group> |
|||
<field name="cab_time" widget="many2many_tags"/> |
|||
<field name="seat" style="width:25%%"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="cab_timing_tree_view"> |
|||
<field name="name">Cab Timing</field> |
|||
<field name="model">cab.timing</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Cab Timing"> |
|||
<field name="name"/> |
|||
<field name="cab_route"/> |
|||
<field name="cab_route_to"/> |
|||
<field name="cab_time" widget="many2many_tags"/> |
|||
<field name="seat"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.actions.act_window" id="cab_timing_action"> |
|||
<field name="name">Cab Timing</field> |
|||
<field name="res_model">cab.timing</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form,calender</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create">Create Your First Record |
|||
</p> |
|||
</field> |
|||
</record> |
|||
|
|||
<menuitem id="cab_timing_menu" name="Timing" parent="cab_management_menu" action="cab_timing_action" |
|||
groups="base.group_user" sequence="50"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,23 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="email_template_edi_cab" model="mail.template"> |
|||
<field name="name">Cab Booked</field> |
|||
<field name="email_from">${(object.user_id.email}</field> |
|||
<field name="email_to">${object.partner_id.id}</field> |
|||
<field name="partner_to">${object.partner_id.id}</field> |
|||
<field name="subject">Cab Booked</field> |
|||
<field name="model_id" ref="cab_booking_management.model_cab_log" /> |
|||
<field name="auto_delete" eval="True" /> |
|||
<field name="body_html"><![CDATA[ |
|||
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; "> |
|||
<p>Hello ${object.partner_id.name},</p> |
|||
<p> This Email is to inform you that your request for cab on ${object.cab_log_date} is approved </p> |
|||
</div> |
|||
]]> |
|||
</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import models |
@ -0,0 +1,43 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': 'CRM Kanban Drag Back Permission', |
|||
'version': '0.2', |
|||
'category': 'CRM', |
|||
'sequence': 6, |
|||
'summary': 'Permission for Drag Back in CRM', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'depends': ['crm', 'sale', 'sales_team'], |
|||
'website': 'http://www.cybrosys.com', |
|||
'images': ['static/description/banner.jpg'], |
|||
'data': [ |
|||
'views/crm_sales_team.xml', |
|||
'views/crm_lead_update.xml', |
|||
'views/templates.xml', |
|||
'security/ir.model.access.csv', |
|||
|
|||
], |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import update_kanban_record |
|||
|
|||
|
@ -0,0 +1,141 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
from odoo import models, fields, api |
|||
|
|||
|
|||
class StageChange(models.Model): |
|||
_inherit = 'crm.lead' |
|||
|
|||
stage_previous = fields.Integer(string="Previous stage", default=False) |
|||
stage_next = fields.Integer(string="Next stage", default=False) |
|||
stage_type = fields.Char() |
|||
new_stage_id = fields.Selection([('previous', 'Previous'), ('current', 'Current'), ('next', 'Next')], readonly=True) |
|||
previous = fields.Char(string="Previous Stage", compute='get_previous_stage') |
|||
next_stage = fields.Char(string="Next Stage", compute='get_next_stage') |
|||
|
|||
|
|||
@api.one |
|||
def get_previous_stage(self): |
|||
self.previous = self.env['crm.stage'].search([('id', '=', self.stage_previous)]).name |
|||
|
|||
@api.one |
|||
def get_next_stage(self): |
|||
self.next_stage = self.env['crm.stage'].search([('id', '=', self.stage_next)]).name |
|||
|
|||
@api.one |
|||
def approve_oppor(self): |
|||
self.write({'stage_id': self.env['crm.stage'].browse([self.stage_next]).id, 'stage_previous': self.stage_id.id, 'stage_next': 0, 'new_stage_id': ''}) |
|||
return |
|||
|
|||
@api.one |
|||
def decline_oppor(self): |
|||
self.write({'stage_id': self.env['crm.stage'].browse([self.stage_previous]).id, 'stage_previous': self.stage_id.id, 'stage_next': 0, 'new_stage_id': ''}) |
|||
return |
|||
|
|||
@api.multi |
|||
def write(self, vals): |
|||
if not vals.get('stage_previous') and vals.get('stage_id'): |
|||
last_stage = self.browse(self.ids).stage_id |
|||
if self.env['crm.stage'].browse([vals['stage_id']]).stage_order < last_stage.stage_order \ |
|||
and not self.env['res.users'].browse(self._uid).has_group('sales_team.group_sale_manager') \ |
|||
and not self.env['res.users'].browse(self._uid).has_group('sales_team.group_sale_salesman_all_leads'): |
|||
vals['stage_previous'] = last_stage.id |
|||
vals['stage_next'] = vals['stage_id'] |
|||
vals['stage_type'] = "approval" |
|||
vals['new_stage_id'] = 'current' |
|||
|
|||
to_approve = self.env['crm.stage'].search([('type', '=', 'approval'), ('name', '=', 'Waiting for approval')]) |
|||
if to_approve: |
|||
vals['stage_id'] = to_approve.id |
|||
else: |
|||
values = { |
|||
'name': "Waiting for approval", |
|||
'type': "approval", |
|||
'stage_order': -1, |
|||
} |
|||
result = self.env['crm.stage'].create(values) |
|||
vals['stage_id'] = result.id |
|||
|
|||
elif vals.get('stage_id'): |
|||
vals['stage_type'] = "" |
|||
|
|||
res = super(StageChange, self).write(vals) |
|||
return res |
|||
|
|||
def get_approvals(self, context=None): |
|||
object_list = [] |
|||
tree_res = self.env['ir.model.data'].get_object_reference('crm', 'crm_case_tree_view_oppor') |
|||
x = self.env['ir.model.data'].get_object_reference('crm_drag_back_permission', 'action_waiting_approval_window') |
|||
tree_id = tree_res and tree_res[1] or False |
|||
form_res = self.env['ir.model.data'].get_object_reference('crm', 'crm_case_form_view_leads') |
|||
form_id = form_res and form_res[1] or False |
|||
approval_stage = self.env['crm.lead'] |
|||
approvals = approval_stage.search([('stage_id.type', '=', "approval")]) |
|||
user_obj = self.env['res.users'] |
|||
u_id = user_obj.browse([self._uid]) |
|||
if u_id.has_group('sales_team.group_sale_salesman_all_leads') and u_id.has_group( |
|||
'sales_team.group_sale_salesman') and u_id.has_group('sales_team.group_sale_manager'): |
|||
for i in approvals: |
|||
object_list.append(i.id) |
|||
elif u_id.has_group('sales_team.group_sale_salesman_all_leads') and u_id.has_group('sales_team.group_sale_salesman'): |
|||
teams = self.env['crm.team'].search([('user_id.id', '=', self._uid)]) |
|||
team_ids = [] |
|||
for i in teams: |
|||
team_ids.append(i.id) |
|||
object_list = [] |
|||
if approvals: |
|||
for obj in approvals: |
|||
if obj.team_id.id in team_ids: |
|||
object_list.append(obj.id) |
|||
elif u_id.has_group('sales_team.group_sale_salesman'): |
|||
object_list = [] |
|||
if approvals: |
|||
for obj in approvals: |
|||
if obj.user_id.id == self._uid: |
|||
object_list.append(obj.id) |
|||
return { |
|||
'model': 'ir.actions.act_window', |
|||
'name': 'Waiting Approval', |
|||
'type': 'ir.actions.act_window', |
|||
'view_type': 'form', |
|||
'view_mode': 'form,tree', |
|||
'res_model': 'crm.lead', |
|||
'views': [(tree_id, 'tree'), (form_id, 'form')], |
|||
'domain': [('id', 'in', object_list)], |
|||
'id': x[1], |
|||
} |
|||
|
|||
|
|||
class NewStage(models.Model): |
|||
_inherit = 'crm.stage' |
|||
|
|||
stage_order = fields.Integer(string='Order') |
|||
type = fields.Selection([('lead', 'Lead'), ('opportunity', 'Opportunity'), ('both', 'Both'), ('approval', '')], |
|||
string='Type', required=True, |
|||
help="This field is used to distinguish stages related to Leads from stages related to " |
|||
"Opportunities or to specify stages available for both types.") |
|||
|
|||
|
|||
|
|||
|
|||
|
After Width: | Height: | Size: 120 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 30 KiB |
@ -0,0 +1,96 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">CRM Kanban Drag Back</h2> |
|||
<h3 class="oe_slogan">Permission for Back Drag in CRM Kanban view</h3> |
|||
<h4 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h4> |
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
<div> |
|||
This module restricts some users to drag leads backwards in sales pipeline without permission. |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="image1.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
Go to Configuration -> Sales Teams, and enable the 'Leads' option for the teams you want to use. |
|||
</p> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="image2.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
Go to Configuration -> Stages, and set an 'order'(integer value) for each stage you want to use in the pipeline. |
|||
The drag back is working based on this 'order' field value. When a user tries to drag a lead from one stage to another, |
|||
we will check the 'order' of those two stages. |
|||
If the movement is from a stage with higher order value to a stage with lower order value, it will be considered |
|||
as a back drag. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
When a salesperson tries to perform a back drag, the lead will go to a new stage, 'Waiting for Approval'. |
|||
From this stage, the Administrator or the Head of Sales of team which the lead belongs to, can |
|||
approve the lead to the stage requested by the user or decline the lead back to it's previous stage. |
|||
The salesperson can't move the lead from this stage. |
|||
</p> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="image3.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="image5.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
In the 'Waiting for Approval' stage, a lead will be visible only to the administrator, |
|||
the user to which the lead is assigned to and the head of sales of team that the lead belongs to. |
|||
When we select a lead in the 'Waiting for Approval' stage, we can see the stages, the lead comes from and where the lead is headed to. |
|||
</p> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="image4.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h2 class="oe_slogan">Need Any Help?</h2> |
|||
<div class="oe_slogan"> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
|
@ -0,0 +1,19 @@ |
|||
odoo.define('crm_drag_back_permission',function(require) { |
|||
|
|||
var kanbanview = require('web_kanban.KanbanView'); |
|||
var Model = require('web.Model'); |
|||
kanbanview.include({ |
|||
render: function () { |
|||
this._super(this); |
|||
|
|||
for (var key in this.widgets) { |
|||
|
|||
if (this.widgets[key]['title'] == 'Waiting for approval'){ |
|||
var test = this.widgets[key].$el |
|||
test.css("display", "None"); |
|||
} |
|||
|
|||
} |
|||
}, |
|||
}); |
|||
}); |
@ -0,0 +1,116 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<openerp> |
|||
<data> |
|||
<record id="crm_case_form_view_lead_updated" model="ir.ui.view"> |
|||
<field name="name">Leads updated</field> |
|||
<field name="model">crm.lead</field> |
|||
<field name="inherit_id" ref="crm.crm_case_form_view_leads" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='partner_id']" position="after"> |
|||
<field name="stage_previous" invisible="1" /> |
|||
<field name="stage_next" invisible="1" /> |
|||
<field name="stage_type" invisible="1" /> |
|||
</xpath> |
|||
<xpath expr="//field[@name='user_id']" position="attributes"> |
|||
<attribute name="required">1</attribute> |
|||
</xpath> |
|||
|
|||
<xpath expr="//form/header" position="inside"> |
|||
<button name="approve_oppor" string="Approve" groups="sales_team.group_sale_manager,sales_team.group_sale_salesman_all_leads" |
|||
type="object" class="oe_highlight o_wow" attrs="{'invisible': [('stage_type','!=','approval')]}"/> |
|||
<button name="decline_oppor" string="Decline" groups="sales_team.group_sale_manager,sales_team.group_sale_salesman_all_leads" |
|||
type="object" class="oe_highlight o_wow" attrs="{'invisible': [('stage_type','!=','approval')]}"/> |
|||
|
|||
</xpath> |
|||
<xpath expr="//form/header/button[1]" position="attributes"> |
|||
<attribute name="attrs">{'invisible': [('stage_type','=','approval')]} |
|||
</attribute> |
|||
</xpath> |
|||
|
|||
<xpath expr="//group[1]/group[2]" position="before"> |
|||
<group> |
|||
<field name="previous" /> |
|||
<field name="next_stage"/> |
|||
</group> |
|||
</xpath> |
|||
|
|||
</field> |
|||
</record> |
|||
|
|||
<record id="crm_case_form_view_opport_updated" model="ir.ui.view"> |
|||
<field name="name">Opportunity updated</field> |
|||
<field name="model">crm.lead</field> |
|||
<field name="inherit_id" ref="crm.crm_case_form_view_oppor" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='partner_id']" position="after"> |
|||
<field name="stage_previous" invisible="1" /> |
|||
<field name="stage_next" invisible="1" /> |
|||
<field name="stage_type" invisible="1" /> |
|||
</xpath> |
|||
<xpath expr="//field[@name='user_id']" position="attributes"> |
|||
<attribute name="required">1</attribute> |
|||
</xpath> |
|||
|
|||
<xpath expr="//form/header" position="inside"> |
|||
<button name="approve_oppor" string="Approve" groups="sales_team.group_sale_manager,sales_team.group_sale_salesman_all_leads" |
|||
type="object" class="oe_highlight o_wow" attrs="{'invisible': [('stage_type','!=','approval')]}"/> |
|||
<button name="decline_oppor" string="Decline" groups="sales_team.group_sale_manager,sales_team.group_sale_salesman_all_leads" |
|||
type="object" class="oe_highlight o_wow" attrs="{'invisible': [('stage_type','!=','approval')]}" /> |
|||
|
|||
</xpath> |
|||
<xpath expr="//form/header/button[1]" position="attributes"> |
|||
<attribute name="attrs">{'invisible': [('stage_type','=','approval')]}</attribute> |
|||
</xpath> |
|||
<xpath expr="//form/header/button[2]" position="attributes"> |
|||
<attribute name="attrs">{'invisible': [('stage_type','=','approval')]}</attribute> |
|||
</xpath> |
|||
<xpath expr="//form/header/button[3]" position="attributes"> |
|||
<attribute name="attrs">{'invisible': [('stage_type','=','approval')]}</attribute> |
|||
</xpath> |
|||
<xpath expr="//form/header/field[@name='stage_id']" position="attributes"> |
|||
<attribute name="attrs">{'invisible': [('stage_type','=','approval')]}</attribute> |
|||
</xpath> |
|||
|
|||
<xpath expr="//group[1]/group[2]" position="before"> |
|||
<group> |
|||
<field name="previous" /> |
|||
<field name="next_stage"/> |
|||
</group> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="crm_case_stage_updated" model="ir.ui.view"> |
|||
<field name="name">Stages Updated</field> |
|||
<field name="model">crm.stage</field> |
|||
<field name="inherit_id" ref="crm.crm_stage_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='on_change']" position="after"> |
|||
<field name="stage_order" /> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_waiting_approval_window" model="ir.actions.act_window"> |
|||
<field name="name">Waiting</field> |
|||
<field name="res_model">crm.lead</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
|
|||
<record id="action_waiting_approval" model="ir.actions.server"> |
|||
<field name="name">Waiting</field> |
|||
<field name="type">ir.actions.server</field> |
|||
<field name="res_model">crm.lead</field> |
|||
<field name="model_id" ref="model_crm_lead"/> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="state">code</field> |
|||
<field name="code">action = env['crm.lead'].get_approvals(context=context)</field> |
|||
</record> |
|||
|
|||
<menuitem name="Waiting for approval" id="waiting_approval" action="action_waiting_approval" parent="sales_team.menu_sales" /> |
|||
|
|||
</data> |
|||
</openerp> |
@ -0,0 +1,21 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<record id="sales_team.group_sale_manager" model="res.groups"> |
|||
<field name="name">CEO/Head of Business strategy</field> |
|||
<field name="implied_ids" eval="[(4, ref('sales_team.group_sale_salesman'))]"/> |
|||
</record> |
|||
<record id="sales_team.group_sale_salesman_all_leads" model="res.groups"> |
|||
<field name="name">Head Of Sales</field> |
|||
<field name="category_id" ref="base.module_category_sales_management"/> |
|||
<field name="implied_ids" eval="[(4, ref('sales_team.group_sale_salesman'))]"/> |
|||
<field name="comment">the user will have access to all records of everyone in the sales application.</field> |
|||
</record> |
|||
<record id="sales_team.group_sale_salesman" model="res.groups"> |
|||
<field name="name">SalesPerson</field> |
|||
<field name="category_id" ref="base.module_category_sales_management"/> |
|||
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> |
|||
<field name="comment">the user will have access to his own data in the sales application.</field> |
|||
</record> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<template id="assets_backend" name="hide_stage_kanban" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
|
|||
<script type="text/javascript" src="/crm_drag_back_permission/static/src/js/hide_stage.js"></script> |
|||
|
|||
</xpath> |
|||
</template> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,36 @@ |
|||
Cron Job Failure Notifications v10 |
|||
================================== |
|||
|
|||
This module will generate error Logs for Scheduled Actions / Cron jobs running in backend server. |
|||
Purpose of module to have creating history of failure of all jobs in backend. |
|||
|
|||
Features |
|||
======== |
|||
|
|||
* Any failure will automatically logged. |
|||
* PDF Report for error logs. |
|||
* Custom Error Logs Scheduled Actions Email Template. |
|||
|
|||
Installation |
|||
============ |
|||
No other requirements. |
|||
|
|||
To test the module: |
|||
- Activate Developer mode |
|||
- Go to Settings --> Technical --> Automation --> Scheduled actions. |
|||
- Select the record "Test Cron Failure Notification" and check active button. |
|||
- Click the button 'Run Manually'. |
|||
- A log of scheduler failure will be created under the menu 'Logs Scheduled Actions'. |
|||
|
|||
Configuration |
|||
============= |
|||
|
|||
To analyse log history of cron failure, |
|||
|
|||
Go to Settings --> Technical --> Automation --> Logs Scheduled Actions. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Developer: Mufeeda C K @ cybrosys |
|||
Guidance: Nilmar Shereef @ cybrosys, shereef@cybrosys.in |
@ -0,0 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
##############################################################################import models |
@ -0,0 +1,50 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': "Cron Failure Notification", |
|||
'version': '10.0.1.0.0', |
|||
'category': 'Extra Tools', |
|||
'summary': """Cron jobs/Scheduled Actions failure Log Notification & Its PDF Reports""", |
|||
'description': """ |
|||
This module will generate error Logs for Scheduled |
|||
Actions / Cron jobs running in backend server |
|||
""", |
|||
'author': "Cybrosys Techno Solutions", |
|||
'company': "Cybrosys Techno Solutions", |
|||
'website': "http://www.cybrosys.com", |
|||
'depends': ['base', 'mail', 'web', 'base_setup'], |
|||
'data': [ |
|||
'views/logs_scheduled_actions_view.xml', |
|||
'views/error_log_report_template.xml', |
|||
'views/report.xml', |
|||
'views/error_mail_template.xml' |
|||
], |
|||
'demo': [ |
|||
'demo/ir_cron_demo.xml' |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'LGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,50 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': "Cron Failure Notification", |
|||
'version': '10.0.1.0.0', |
|||
'category': 'Extra Tools', |
|||
'summary': """Cron job failure log""", |
|||
'description': """ |
|||
This module will generate error Logs for Scheduled |
|||
Actions / Cron jobs running in backend server |
|||
""", |
|||
'author': "Cybrosys Techno Solutions", |
|||
'company': "Cybrosys Techno Solutions", |
|||
'website': "http://www.cybrosys.com", |
|||
'depends': ['base', 'mail', 'web', 'base_setup'], |
|||
'data': [ |
|||
'views/logs_scheduled_actions_view.xml', |
|||
'views/error_log_report_template.xml', |
|||
'views/report.xml', |
|||
'views/error_mail_template.xml' |
|||
], |
|||
'demo': [ |
|||
'demo/ir_cron_demo.xml' |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'LGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,21 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
|
|||
<odoo> |
|||
<data noupdate="1"> |
|||
|
|||
<record id="test_scheduler_error_mailer" model="ir.cron"> |
|||
<field name="name">Test Cron Failure Notification</field> |
|||
<field name="active" eval="False"/> |
|||
<field name="user_id" ref="base.user_root"/> |
|||
<field name="interval_number">1</field> |
|||
<field name="interval_type">hours</field> |
|||
<field name="numbercall">-1</field> |
|||
<!-- don't limit the number of calls --> |
|||
<field name="doall" eval="True"/> |
|||
<field name="model">ir.cron</field> |
|||
<field name="function">_test_scheduler_failure</field> |
|||
<field name="email_template_id" ref="cron_failure_notification.scheduler_error_mailer"/> |
|||
</record> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import logs_scheduled_actions |
@ -0,0 +1,113 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import datetime |
|||
import logging |
|||
from odoo import models, fields, api, _ |
|||
from odoo.tools.translate import _ |
|||
from odoo.exceptions import UserError |
|||
|
|||
|
|||
class LogsScheduledActions(models.Model): |
|||
_description = "Error log" |
|||
_name = 'logs.action' |
|||
_inherit = ['mail.thread', 'ir.needaction_mixin', 'ir.cron'] |
|||
|
|||
name = fields.Char(string="Name", required=True, track_visibility='always') |
|||
method = fields.Char(string="Method", track_visibility='always') |
|||
created_by = fields.Many2one('res.users', string="Created by", default=lambda self: self.env.user, index=True) |
|||
object_action = fields.Char(string="Object", track_visibility='always') |
|||
exec_date = fields.Datetime(string="Execution Date Time") |
|||
company_name = fields.Many2one('res.company', string="Company", default=lambda self: self.env.user.company_id, |
|||
index=True) |
|||
stages_id = fields.Selection( |
|||
[('new', 'New'), ('confirm', 'Confirmed'), ('resolved', 'Resolved'), ('cancelled', 'Cancelled')], default='new') |
|||
error_details = fields.Char(string="Error details", track_visibility='always') |
|||
|
|||
@api.multi |
|||
def action_mail_send(self): |
|||
self.ensure_one() |
|||
ir_model_data = self.env['ir.model.data'] |
|||
template_id = ir_model_data.get_object_reference('cron_failure_notification', |
|||
'scheduler_error_mailer')[1] |
|||
try: |
|||
compose_form_id = ir_model_data.get_object_reference('mail', 'email_compose_message_wizard_form')[1] |
|||
except ValueError: |
|||
compose_form_id = False |
|||
ctx = dict(self.env.context or {}) |
|||
ctx.update({ |
|||
'default_model': 'logs.action', |
|||
'default_res_id': self.ids[0], |
|||
'default_use_template': bool(template_id), |
|||
'default_template_id': template_id, |
|||
'default_composition_mode': 'comment', |
|||
}) |
|||
|
|||
return { |
|||
'name': _('Compose Email'), |
|||
'type': 'ir.actions.act_window', |
|||
'view_type': 'form', |
|||
'view_mode': 'form', |
|||
'res_model': 'mail.compose.message', |
|||
'views': [(compose_form_id, 'form')], |
|||
'view_id': compose_form_id, |
|||
'target': 'new', |
|||
'context': ctx, |
|||
} |
|||
|
|||
def button_confirm_action(self): |
|||
self.stages_id = 'confirm' |
|||
|
|||
def button_resolved_action(self): |
|||
self.stages_id = 'resolved' |
|||
|
|||
def button_cancel_action(self): |
|||
self.stages_id = 'cancelled' |
|||
|
|||
_logger = logging.getLogger(__name__) |
|||
|
|||
|
|||
class IrCron(models.Model): |
|||
_inherit = "ir.cron" |
|||
|
|||
@api.model |
|||
def _handle_callback_exception( |
|||
self, model_name, method_name, args, job_id, job_exception): |
|||
res = super(IrCron, self)._handle_callback_exception( |
|||
model_name, method_name, args, job_id, job_exception) |
|||
my_cron = self.browse(job_id) |
|||
self.env['logs.action'].create({ |
|||
'name': my_cron.name, |
|||
'method': my_cron.model, |
|||
'object_action': my_cron.function, |
|||
'exec_date': datetime.datetime.now(), |
|||
'error_details': str(job_exception), |
|||
}) |
|||
|
|||
return res |
|||
|
|||
@api.model |
|||
def _test_scheduler_failure(self): |
|||
"""This function is used to test and debug this module""" |
|||
|
|||
raise UserError( |
|||
_("Task failure with UID = %d.") % self._uid) |
After Width: | Height: | Size: 144 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,85 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Cron Job Failure Notification</h2> |
|||
<h3 class="oe_slogan"><center>Error Logs for Scheduled Actions/Cron jobs running in backend server.</center></h3> |
|||
<h4 class="oe_slogan">Cybrosys Technologies , www.cybrosys.com</h4> |
|||
|
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
<h4><p>Major Features:</p></h4> |
|||
<ul> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Creating Failure History for All Jobs in Backend.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Failure Report Will Automatically Logged.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Administrator Can Review Logs.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Send Report to Support/Technical Team by Email Button.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Custom Email Template for Sending Mail with Failure Details.</li> |
|||
</ul> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h3 class="oe_slogan">Error Logs Scheduled Actions - Form View</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="logs_form_view.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
|
|||
<section class="oe_container"> |
|||
<h3 class="oe_slogan">Print PDF Report- Error Logs Scheduled</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="logs_pdf_report.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h3 class="oe_slogan">Send By Email - Error Logs Scheduled Actions Attaching PDF Report</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="logs_mail_template.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_row oe_spaced"> |
|||
<h3 class="oe_slogan" style="text-align:left;padding-left: 23px;">How to test this module ?</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<p> |
|||
<ul> |
|||
<li>Activate Developer mode.</li> |
|||
<li>Go to Settings --> Technical --> Automation --> Scheduled actions.</li> |
|||
<li>Select the record "Test Cron Failure Notification" and check active button.</li> |
|||
<li>Click the button 'Run Manually'.</li> |
|||
<li>A log of scheduler failure will be created under the menu 'Logs Scheduled Actions'.</li> |
|||
<li>For more details, Please see the README.rst file with this module.</li> |
|||
</ul> |
|||
</p> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
</section> |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 41 KiB |
@ -0,0 +1,55 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<template id="report_log_error"> |
|||
<t t-call="report.html_container"> |
|||
<t t-call="report.internal_layout"> |
|||
<div class="page"> |
|||
<p t-esc="res_company.name"/> |
|||
<h2> |
|||
<span t-field="doc.name"/> |
|||
</h2> |
|||
<table class="table"> |
|||
<tbody> |
|||
<tr t-if="doc.object_action"> |
|||
<th>Object:</th> |
|||
<td><span t-field="doc.object_action"/></td> |
|||
</tr> |
|||
<tr t-if="doc.method"> |
|||
<th>Method:</th> |
|||
<td><span t-field="doc.method"/></td> |
|||
</tr> |
|||
<tr t-if="doc.created_by"> |
|||
<th>Responsible user:</th> |
|||
<td><span t-field="doc.created_by"/></td> |
|||
</tr> |
|||
<tr t-if="doc.exec_date"> |
|||
<th>Execution Date Time:</th> |
|||
<td><span t-field="doc.exec_date"/></td> |
|||
</tr> |
|||
<tr t-if="doc.company_name"> |
|||
<th>Company:</th> |
|||
<td><span t-field="doc.company_name"/></td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
<br/><br/> |
|||
<strong><p>Error: </p></strong> |
|||
<p t-field="doc.error_details"/> |
|||
<div class="oe_structure"/> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<template id="report_logs_details"> |
|||
<t t-call="report.html_container"> |
|||
<t t-foreach="docs" t-as="doc"> |
|||
<t t-call="cron_failure_notification.report_log_error" /> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,25 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
|
|||
<odoo> |
|||
<data noupdate="1"> |
|||
|
|||
<!-- Error Email template --> |
|||
<record id="scheduler_error_mailer" model="mail.template"> |
|||
<field name="name">Scheduler Error</field> |
|||
<field name="email_from">${object.user_id.email}</field> |
|||
<field name="subject">'${object.name}' FAILED</field> |
|||
<field name="report_template" ref="action_report_logs"/> |
|||
<field name="model_id" ref="cron_failure_notification.model_logs_action"/> |
|||
<field name="auto_delete" eval="True"/> |
|||
<field name="body_html"> |
|||
<![CDATA[ |
|||
Dear Support team,<br> |
|||
<p>Here we are attaching error logs from scheduled cron jobs on our server, so please |
|||
urgently take action.<br> If you have any question, don't hesitate to contact us.<br></p><br> |
|||
Thank You. |
|||
]]> |
|||
</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,77 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<record model="ir.ui.view" id="developer_mode_active_form"> |
|||
<field name="name">DeveloperMode</field> |
|||
<field name="model"></field> |
|||
<field name="inherit_id" ref="web.login"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//input[@name='redirect']" position='attributes'> |
|||
<attribute name="t-att-value">'%s%sdebug=1' % (redirect or '/web', redirect and '?' in redirect and '&' or '?')</attribute> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
<record id="logs_form_view" model="ir.ui.view"> |
|||
<field name="name">logs.action.form</field> |
|||
<field name="model">logs.action</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_type">form</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Logs"> |
|||
<header> |
|||
<button name="button_confirm_action" string="Confirm" type="object" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'new')]}"/> |
|||
<button name="button_cancel_action" string="Cancel" type="object" attrs="{'invisible': [('stages_id', '!=', 'new')]}"/> |
|||
<button name="button_resolved_action" string="Resolve" type="object" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'confirm')]}"/> |
|||
<button name="action_mail_send" string="Send By Email" type="object" context="{'send_mail':True}" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'confirm')]}"/> |
|||
<field name="stages_id" widget="statusbar"/> |
|||
</header> |
|||
<sheet string="Logs"> |
|||
<group> |
|||
<group> |
|||
<field name="name"/> |
|||
<field name="method"/> |
|||
<field name="created_by"/> |
|||
</group> |
|||
<group> |
|||
<field name="object_action"/> |
|||
<field name="exec_date"/> |
|||
<field name="company_name"/> |
|||
</group> |
|||
</group> |
|||
<notebook> |
|||
<page name="error_info" string="Error"> |
|||
<field name="error_details"/> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
<div class="oe_chatter"> |
|||
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/> |
|||
<field name="message_ids" widget="mail_thread"/> |
|||
</div> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.ui.view" id="logs_tree_view"> |
|||
<field name="name">logs.action.tree</field> |
|||
<field name="model">logs.action</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Logs"> |
|||
<field name="name"/> |
|||
<field name="exec_date"/> |
|||
<field name="stages_id"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="ir_cron_act_logs" model="ir.actions.act_window"> |
|||
<field name="name">Logs Scheduled Actions</field> |
|||
<field name="res_model">logs.action</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">form,tree</field> |
|||
<field name="view_id" ref="logs_tree_view"/> |
|||
</record> |
|||
|
|||
<menuitem id="menu_ir_cron_logs" action="ir_cron_act_logs" parent="base.menu_automation"/> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,12 @@ |
|||
<odoo> |
|||
<data> |
|||
<report id="action_report_logs" |
|||
model="logs.action" |
|||
string="Print Log Scheduled" |
|||
report_type="qweb-pdf" |
|||
file="cron_failure_notification.report_logs_details" |
|||
name="cron_failure_notification.report_logs_details" |
|||
menu="True" |
|||
/> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,21 @@ |
|||
Automatic Developer Mode v10 |
|||
============================ |
|||
|
|||
This module aims to reduce the repeated works of a Odoo Developer. |
|||
|
|||
Features |
|||
======== |
|||
|
|||
* Automatically Trigger Developer Mode. |
|||
* Showing Running DB On Left Top. |
|||
* Update Modules Easily. |
|||
|
|||
|
|||
.. note:: |
|||
|
|||
# If you installed any other tool, This module may not work properly. |
|||
# There is a dev mode property missing issue with website module. |
|||
|
|||
Credits |
|||
======= |
|||
Nilmar Shereef @ cybrosys, shereef@cybrosys.in |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
@ -0,0 +1,43 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nilmar Shereef(<http://www.cybrosys.com>) |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': "Automatic Developer Mode", |
|||
'summary': """Automatically Activate Developer Mode & Running DB Name on Left Top""", |
|||
'version': '10.0.3.0.0', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'website': "http://www.cybrosys.com", |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'category': 'Extra Tools', |
|||
'depends': ['base', 'web', 'base_setup'], |
|||
'data': [ |
|||
'views/web_view.xml', |
|||
'security/security_data.xml', |
|||
'views/developer_mode_view.xml', |
|||
'views/ir_rule_view.xml', |
|||
'data/cybro_developer_data.xml', |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |