diff --git a/base_accounting_kit/__manifest__.py b/base_accounting_kit/__manifest__.py index d273796ff..81f0cc087 100644 --- a/base_accounting_kit/__manifest__.py +++ b/base_accounting_kit/__manifest__.py @@ -22,7 +22,7 @@ { 'name': 'Odoo 14 Full Accounting Kit', - 'version': '14.0.2.7.6', + 'version': '14.0.3.7.7', 'category': 'Accounting', 'live_test_url': 'https://www.youtube.com/watch?v=peAp2Tx_XIs', 'summary': """ Asset and Budget Management, @@ -58,6 +58,7 @@ 'data/followup_levels.xml', 'data/account_asset_data.xml', 'data/recurring_entry_cron.xml', + 'data/multiple_invoice_data.xml', 'views/assets.xml', 'views/dashboard_views.xml', 'views/reports_config_view.xml', @@ -76,6 +77,8 @@ 'views/account_asset_templates.xml', 'views/product_template_views.xml', 'views/payment_matching.xml', + 'views/multiple_invoice_layout_view.xml', + 'views/multiple_invoice_form.xml', 'wizard/financial_report.xml', 'wizard/general_ledger.xml', 'wizard/partner_ledger.xml', @@ -101,6 +104,8 @@ 'report/account_day_book_view.xml', 'report/account_asset_report_views.xml', 'report/report.xml', + 'report/multiple_invoice_layouts.xml', + 'report/multiple_invoice_report.xml', ], 'qweb': [ 'static/src/xml/template.xml', diff --git a/base_accounting_kit/data/multiple_invoice_data.xml b/base_accounting_kit/data/multiple_invoice_data.xml new file mode 100644 index 000000000..25635d3b3 --- /dev/null +++ b/base_accounting_kit/data/multiple_invoice_data.xml @@ -0,0 +1,8 @@ + + + + + Sample Name + + + diff --git a/base_accounting_kit/doc/changelog.md b/base_accounting_kit/doc/changelog.md index a483bcaa0..b1c7e63bb 100644 --- a/base_accounting_kit/doc/changelog.md +++ b/base_accounting_kit/doc/changelog.md @@ -48,3 +48,8 @@ #### UPDT - Reconcilation issue. +#### 27.04.2021 +#### Version 14.0.3.7.7 +#### UPDT +- Multiple Invoice Copies added. + diff --git a/base_accounting_kit/models/__init__.py b/base_accounting_kit/models/__init__.py index 646509e4b..8c67d7c43 100644 --- a/base_accounting_kit/models/__init__.py +++ b/base_accounting_kit/models/__init__.py @@ -34,3 +34,5 @@ from . import res_config_settings from . import res_partner from . import account_dashboard from . import payment_matching +from . import multiple_invoice +from . import multiple_invoice_layout diff --git a/base_accounting_kit/models/multiple_invoice.py b/base_accounting_kit/models/multiple_invoice.py new file mode 100644 index 000000000..e1c99b1fa --- /dev/null +++ b/base_accounting_kit/models/multiple_invoice.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from odoo import fields, models + + +class MultipleInvoice(models.Model): + """Multiple Invoice Model""" + _name = "multiple.invoice" + _order = "sequence" + + sequence = fields.Integer('Sequence No') + + copy_name = fields.Char('Invoice Copy Name') + + journal_id = fields.Many2one('account.journal', string="Journal") + + +class AccountJournal(models.Model): + """Inheriting Account Journal Model""" + _inherit = "account.journal" + + multiple_invoice_ids = fields.One2many('multiple.invoice', 'journal_id', + string='Multiple Invoice') + + multiple_invoice_type = fields.Selection( + [('text', 'Text'), ('watermark', 'Watermark')], required=True, + default='text', string="Display Type") + + text_position = fields.Selection([ + ('header', 'Header'), + ('footer', 'Footer'), + ('body', 'Document Body') + ], required=True, default='header') + + body_text_position = fields.Selection([ + ('tl', 'Top Left'), + ('tr', 'Top Right'), + ('bl', 'Bottom Left'), + ('br', 'Bottom Right'), + + ], default='tl') + + text_align = fields.Selection([ + ('right', 'Right'), + ('left', 'Left'), + ('center', 'Center'), + + ], default='right') + + layout = fields.Char(related="company_id.external_report_layout_id.key") diff --git a/base_accounting_kit/models/multiple_invoice_layout.py b/base_accounting_kit/models/multiple_invoice_layout.py new file mode 100644 index 000000000..e912642a5 --- /dev/null +++ b/base_accounting_kit/models/multiple_invoice_layout.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models + +from odoo.modules import get_resource_path + +try: + import sass as libsass +except ImportError: + libsass = None + + +class MultipleInvoiceLayout(models.TransientModel): + """ + Customise the invoice copy document layout and display a live preview + """ + + _name = 'multiple.invoice.layout' + _description = 'Multiple Invoice Document Layout' + + def _get_default_journal(self): + return self.env['account.journal'].search( + [('id', '=', self.env.context.get('active_id'))]).id + + company_id = fields.Many2one( + 'res.company', default=lambda self: self.env.company, required=True) + + layout = fields.Char(related="company_id.external_report_layout_id.key") + + journal_id = fields.Many2one('account.journal', string='Journal', + required=True, default=_get_default_journal) + + multiple_invoice_type = fields.Selection( + related='journal_id.multiple_invoice_type', readonly=False, + required=True) + + text_position = fields.Selection(related='journal_id.text_position', + readonly=False, required=True, + default='header') + + body_text_position = fields.Selection( + related='journal_id.body_text_position', + readonly=False) + + text_align = fields.Selection( + related='journal_id.text_align', + readonly=False) + + preview = fields.Html(compute='_compute_preview', + sanitize=False, + sanitize_tags=False, + sanitize_attributes=False, + sanitize_style=False, + sanitize_form=False, + strip_style=False, + strip_classes=False) + + @api.depends('multiple_invoice_type', 'text_position', 'body_text_position', + 'text_align') + def _compute_preview(self): + """ compute a qweb based preview to display on the wizard """ + + styles = self._get_asset_style() + + for wizard in self: + if wizard.company_id: + preview_css = self._get_css_for_preview(styles, wizard.id) + layout = self._get_layout_for_preview() + ir_ui_view = wizard.env['ir.ui.view'] + wizard.preview = ir_ui_view._render_template( + 'base_accounting_kit.multiple_invoice_wizard_preview', + {'company': wizard.company_id, 'preview_css': preview_css, + 'layout': layout, + 'mi_type': self.multiple_invoice_type, + 'txt_position': self.text_position, + 'body_txt_position': self.body_text_position, + 'txt_align': self.text_align, + 'mi': self.env.ref( + 'base_accounting_kit.multiple_invoice_sample_name') + }) + else: + wizard.preview = False + + def _get_asset_style(self): + template_style = self.env.ref('web.styles_company_report', + raise_if_not_found=False) + if not template_style: + return b'' + + company_styles = template_style._render({ + 'company_ids': self.company_id, + }) + + return company_styles + + @api.model + def _get_css_for_preview(self, scss, new_id): + """ + Compile the scss into css. + """ + css_code = self._compile_scss(scss) + return css_code + + @api.model + def _compile_scss(self, scss_source): + """ + This code will compile valid scss into css. + Parameters are the same from odoo/addons/base/models/assetsbundle.py + Simply copied and adapted slightly + """ + + # No scss ? still valid, returns empty css + if not scss_source.strip(): + return "" + + precision = 8 + output_style = 'expanded' + bootstrap_path = get_resource_path('web', 'static', 'lib', 'bootstrap', + 'scss') + + try: + return libsass.compile( + string=scss_source, + include_paths=[ + bootstrap_path, + ], + output_style=output_style, + precision=precision, + ) + except libsass.CompileError as e: + raise libsass.CompileError(e.args[0]) + + def _get_layout_for_preview(self): + if self.layout == 'web.external_layout_boxed': + new_layout = 'base_accounting_kit.boxed' + + elif self.layout == 'web.external_layout_clean': + new_layout = 'base_accounting_kit.clean' + + elif self.layout == 'web.external_layout_background': + new_layout = 'base_accounting_kit.background' + + else: + new_layout = 'base_accounting_kit.standard' + + return new_layout + + def document_layout_save(self): + # meant to be overridden + return self.env.context.get('report_action') or { + 'type': 'ir.actions.act_window_close'} diff --git a/base_accounting_kit/report/__init__.py b/base_accounting_kit/report/__init__.py index e6ee4ad65..e96b59f6a 100644 --- a/base_accounting_kit/report/__init__.py +++ b/base_accounting_kit/report/__init__.py @@ -32,4 +32,4 @@ from . import account_bank_book from . import account_cash_book from . import account_day_book from . import account_asset_report - +from . import multiple_invoice_report diff --git a/base_accounting_kit/report/multiple_invoice_layouts.xml b/base_accounting_kit/report/multiple_invoice_layouts.xml new file mode 100644 index 000000000..b88c2b9cb --- /dev/null +++ b/base_accounting_kit/report/multiple_invoice_layouts.xml @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/base_accounting_kit/report/multiple_invoice_report.py b/base_accounting_kit/report/multiple_invoice_report.py new file mode 100644 index 000000000..aa18558e3 --- /dev/null +++ b/base_accounting_kit/report/multiple_invoice_report.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +from odoo import models, api + + +class ReportInvoiceMultiple(models.AbstractModel): + _name = 'report.base_accounting_kit.report_multiple_invoice' + _inherit = 'report.account.report_invoice' + + @api.model + def _get_report_values(self, docids, data=None): + rslt = super()._get_report_values(docids, data) + + inv = rslt['docs'] + layout = inv.journal_id.company_id.external_report_layout_id.key + + if layout == 'web.external_layout_boxed': + new_layout = 'base_accounting_kit.boxed' + + elif layout == 'web.external_layout_clean': + new_layout = 'base_accounting_kit.clean' + + elif layout == 'web.external_layout_background': + new_layout = 'base_accounting_kit.background' + + else: + new_layout = 'base_accounting_kit.standard' + + rslt['mi_type'] = inv.journal_id.multiple_invoice_type + rslt['mi_ids'] = inv.journal_id.multiple_invoice_ids + rslt['txt_position'] = inv.journal_id.text_position + rslt['body_txt_position'] = inv.journal_id.body_text_position + rslt['txt_align'] = inv.journal_id.text_align + rslt['layout'] = new_layout + + rslt['report_type'] = data.get('report_type') if data else '' + return rslt diff --git a/base_accounting_kit/report/multiple_invoice_report.xml b/base_accounting_kit/report/multiple_invoice_report.xml new file mode 100644 index 000000000..e582752e4 --- /dev/null +++ b/base_accounting_kit/report/multiple_invoice_report.xml @@ -0,0 +1,260 @@ + + + + + + + + + Multiple Invoice Copies + account.move + qweb-pdf + base_accounting_kit.report_multiple_invoice + base_accounting_kit.report_multiple_invoice + + report + + + \ No newline at end of file diff --git a/base_accounting_kit/security/ir.model.access.csv b/base_accounting_kit/security/ir.model.access.csv index 07d45653c..16a98c930 100644 --- a/base_accounting_kit/security/ir.model.access.csv +++ b/base_accounting_kit/security/ir.model.access.csv @@ -37,4 +37,7 @@ access_account_report_partner_ledger,access.account.report.partner.ledger,model_ access_account_common_account_report,access.account.common.account.report,model_account_common_account_report,account.group_account_user,1,1,1,1 access_kit_account_tax_report,access.kit.account.tax.report,model_kit_account_tax_report,account.group_account_user,1,1,1,1 access_account_balance_report,access.account.balance.report,model_account_balance_report,account.group_account_user,1,1,1,1 -access_account_recurring_entries_line,access.account.recurring.entries.line,model_account_recurring_entries_line,account.group_account_user,1,1,1,1 \ No newline at end of file +access_account_recurring_entries_line,access.account.recurring.entries.line,model_account_recurring_entries_line,account.group_account_user,1,1,1,1 + +access_multiple_invoice,multiple_invoice,model_multiple_invoice,account.group_account_manager,1,1,1,1 +access_multiple_invoice_layout,multiple_invoice_layout,model_multiple_invoice_layout,account.group_account_manager,1,1,1,1 \ No newline at end of file diff --git a/base_accounting_kit/static/description/banner.gif b/base_accounting_kit/static/description/banner.gif index 557d689bb..44fbc5f58 100644 Binary files a/base_accounting_kit/static/description/banner.gif and b/base_accounting_kit/static/description/banner.gif differ diff --git a/base_accounting_kit/static/description/images/mi_image1.png b/base_accounting_kit/static/description/images/mi_image1.png new file mode 100644 index 000000000..c348ccf61 Binary files /dev/null and b/base_accounting_kit/static/description/images/mi_image1.png differ diff --git a/base_accounting_kit/static/description/images/mi_image2.png b/base_accounting_kit/static/description/images/mi_image2.png new file mode 100644 index 000000000..c08fa6982 Binary files /dev/null and b/base_accounting_kit/static/description/images/mi_image2.png differ diff --git a/base_accounting_kit/static/description/images/mi_image3.png b/base_accounting_kit/static/description/images/mi_image3.png new file mode 100644 index 000000000..3963bcde0 Binary files /dev/null and b/base_accounting_kit/static/description/images/mi_image3.png differ diff --git a/base_accounting_kit/static/description/images/mi_image5.png b/base_accounting_kit/static/description/images/mi_image5.png new file mode 100644 index 000000000..ad7eb2fef Binary files /dev/null and b/base_accounting_kit/static/description/images/mi_image5.png differ diff --git a/base_accounting_kit/static/description/images/mi_image6.png b/base_accounting_kit/static/description/images/mi_image6.png new file mode 100644 index 000000000..7ae937e52 Binary files /dev/null and b/base_accounting_kit/static/description/images/mi_image6.png differ diff --git a/base_accounting_kit/static/description/images/multiple_invoice_banner.png b/base_accounting_kit/static/description/images/multiple_invoice_banner.png new file mode 100644 index 000000000..60639aac0 Binary files /dev/null and b/base_accounting_kit/static/description/images/multiple_invoice_banner.png differ diff --git a/base_accounting_kit/static/description/images/multiple_invoice_icon.png b/base_accounting_kit/static/description/images/multiple_invoice_icon.png new file mode 100644 index 000000000..ff694d161 Binary files /dev/null and b/base_accounting_kit/static/description/images/multiple_invoice_icon.png differ diff --git a/base_accounting_kit/static/description/index.html b/base_accounting_kit/static/description/index.html index 988bbc0e2..c8b651f32 100644 --- a/base_accounting_kit/static/description/index.html +++ b/base_accounting_kit/static/description/index.html @@ -12,41 +12,45 @@
-

Odoo 14 Accounting

-

Dashboard, Asset Management, Accounting - Reports, PDC Management, - Account Lock dates, Customer Credit Limit and Follow Ups, Day book, - Bank book and Cash book reports in Odoo 14 community edition.

+

Odoo 14 Accounting Kit Features

-

Key Highlights

- +

+

+ + Financial reports. +

+

+ + Trial balance report. +

+

+ + Journal audit report. +

+

+ + General ledger report. +

+

+ + Partner ledger report. +

+

+ + Aged partner balance. +

+

+ + Tax reports. +

+
@@ -669,6 +729,7 @@ + + + + + + + + + + + + + + @@ -746,6 +896,11 @@ Manage Customer follow-ups.

+

+ + Multiple Invoice Copies. +

@@ -787,6 +942,7 @@ Tax reports.

+ @@ -810,8 +966,8 @@ In community edition, we have only limited features available under Odoo accounting. Here comes the use of the module Odoo14 Full Accounting Kit by Cybrosys Technologies which is built under the V14 platform. This module will bring back the accounting features such as - Asset management, Accounting Reports, PDC Management, Account Lock dates, Customer Credit - Limit, and Follow-Ups, Daybook, Bankbook, and Cashbook reports. + Asset management, Accounting Reports, PDC Management, Account Lock dates, Multiple Invoice + Copies, Customer Credit Limit, and Follow-Ups, Daybook, Bankbook, and Cashbook reports. diff --git a/base_accounting_kit/views/multiple_invoice_form.xml b/base_accounting_kit/views/multiple_invoice_form.xml new file mode 100644 index 000000000..0a9cc3251 --- /dev/null +++ b/base_accounting_kit/views/multiple_invoice_form.xml @@ -0,0 +1,33 @@ + + + + multiple.invoice.form.inherit.account.journal + account.journal + + + + + + + + + +
+
+
+ + +
+ + + + + + +
+
+
+
+
+
\ No newline at end of file diff --git a/base_accounting_kit/views/multiple_invoice_layout_view.xml b/base_accounting_kit/views/multiple_invoice_layout_view.xml new file mode 100644 index 000000000..71e2de016 --- /dev/null +++ b/base_accounting_kit/views/multiple_invoice_layout_view.xml @@ -0,0 +1,44 @@ + + + + Document Layout + multiple.invoice.layout + +
+ + + + + + + + + +
+ +
+
+
+
+
+
+
+ + + ir.actions.act_window + Configure Copy layout + form + new + multiple.invoice.layout + + + +
+