Coder Social home page Coder Social logo

odooapps's Introduction

Hi there 👋, Odoo Mates here with you !


Facebook Badge Youtube Badge Linkedin Badge Mail Badge


Profile stats Language Contribution
Devorein :: Profile Stats Devorein :: Top Langs]

My coding stack:

Python Odoo PostgreSql Javascript Docker Github Xml

GitHub repo size GitHub language count GitHub top language GitHub last commit


Buy Me A Coffee donate button

odooapps's People

Contributors

heikog67 avatar ksharry avatar mehjabinfarsana avatar niyasnesm avatar odoomates avatar santiagopim avatar sergioameghino avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

odooapps's Issues

[Odoo 15.0] - [om_account_followup] - Subject Line on PDF Report

Issue: Missing subject line on printed payment follow-up report

Howto: Steps to add subject line similar to text

  1. add "'get_title': self._get_title," to the _get_report_values return
  2. add "def _get_title" function
  3. add output to report

File: \om_account_followup\report\followup_print.py

Function: def _get_report_values

original code: return { 'docs': docs, 'doc_ids': docids, 'doc_model': model, 'time': time, 'ids_to_objects': self._ids_to_objects, 'getLines': self._lines_get, 'get_text': self._get_text, 'data': data and data['form'] or {}}

possible change: return { 'docs': docs, 'doc_ids': docids, 'doc_model': model, 'time': time, 'ids_to_objects': self._ids_to_objects, 'getLines': self._lines_get, 'get_text': self._get_text, 'get_title': self._get_title, 'data': data and data['form'] or {}}


File: \om_account_followup\report\followup_print.py

Function: def _get_title

possible change: def _get_title(self, stat_line, followup_id, context=None): fp_obj = self.env['followup.followup'] fp_line = fp_obj.browse(followup_id).followup_line if not fp_line: raise ValidationError( _("The followup plan defined for the current company does not " "have any followup action.")) default_title = '' li_delay = [] for line in fp_line: if not default_title and line.description: default_title = line.description li_delay.append(line.delay) li_delay.sort(reverse=True) partner_line_ids = self.env['account.move.line'].search( [('partner_id', '=', stat_line.partner_id.id), ('full_reconcile_id', '=', False), ('company_id', '=', stat_line.company_id.id), ('blocked', '=', False), ('debit', '!=', False), ('account_id.user_type_id.type', '=', 'receivable'), ('followup_line_id', '!=', False)]) partner_max_delay = 0 partner_max_title = '' for i in partner_line_ids: if i.followup_line_id.delay > partner_max_delay and \ i.followup_line_id.description: partner_max_delay = i.followup_line_id.delay partner_max_title = i.followup_line_id.name title = partner_max_delay and partner_max_title or default_title return title

opinion: its the same function which used for the _get_text but changed to return the title


File: \om_account_followup\views\report_followup.xml

original code: <p t-raw="get_text(o,data['followup_id']).replace('\n', '&lt;br&gt;')"/>

possible change: <p t-esc="get_title(o,data['followup_id'])"/> <p t-raw="get_text(o,data['followup_id']).replace('\n', '&lt;br&gt;')"/>

opinion: I'd prefer to have the title a bit bigger like the original odoo report subject lines but couldn't find a smart way to do it, for the moment i use <p style="font-size:2em;" t-esc="get_title(o,data['followup_id'])"/>

Installing error message

Error:
Odoo Server Error

Traceback (most recent call last):
File "/opt/odoo12/odoo/models.py", line 1108, in _validate_fields
check(self)
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 345, in check_xml
view_def = view.read_combined(['arch'])
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 784, in read_combined
arch = self.apply_view_inheritance(arch_tree, root.id, self.model)
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 732, in apply_view_inheritance
source = self.apply_inheritance_specs(source, specs_tree, view_id)
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 710, in apply_inheritance_specs
self.raise_view_error(
("Element '%s' cannot be located in parent view") % tag, inherit_id)
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 548, in raise_view_error
raise ValueError(message)
ValueError: El elemento '' no puede ser localizado en la vista padre

Contexto del error:
Vista Trial Balance
[view_id: 2312, xml_id: n/a, model: account.balance.report, parent_id: 561]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo12/odoo/tools/convert.py", line 758, in parse
self._tags[rec.tag](rec, de, mode=mode)
File "/opt/odoo12/odoo/tools/convert.py", line 663, in _tag_record
record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
File "/opt/odoo12/odoo/models.py", line 3865, in _load_records
records = self._load_records_create([data['values'] for data in to_create])
File "/opt/odoo12/addons/website/models/ir_ui_view.py", line 129, in _load_records_create
records = super(View, self)._load_records_create(values)
File "/opt/odoo12/odoo/models.py", line 3779, in _load_records_create
return self.create(values)
File "", line 2, in create
File "/opt/odoo12/odoo/api.py", line 452, in _model_create_multi
return create(self, arg)
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 428, in create
return super(View, self).create(vals_list)
File "", line 2, in create
File "/opt/odoo12/odoo/api.py", line 452, in _model_create_multi
return create(self, arg)
File "/opt/odoo12/odoo/models.py", line 3596, in create
fields[0].determine_inverse(batch_recs)
File "/opt/odoo12/odoo/fields.py", line 1117, in determine_inverse
getattr(records, self.inverse)()
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 275, in _inverse_arch
view.write(data)
File "/opt/odoo12/addons/website/models/ir_ui_view.py", line 41, in write
return super(View, self).write(vals)
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 444, in write
return super(View, self).write(self._compute_defaults(vals))
File "/opt/odoo12/odoo/models.py", line 3321, in write
self._write(store_vals)
File "/opt/odoo12/odoo/models.py", line 3457, in _write
self._validate_fields(vals)
File "/opt/odoo12/odoo/models.py", line 1112, in validate_fields
raise ValidationError("%s\n\n%s" % (
("Error while validating constraint"), tools.ustr(e)))
odoo.exceptions.ValidationError: ('Error mientras se validaban las restricciones\n\nEl elemento '' no puede ser localizado en la vista padre\n\nContexto del error:\nVista Trial Balance\n[view_id: 2312, xml_id: n/a, model: account.balance.report, parent_id: 561]', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo12/odoo/http.py", line 656, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo12/odoo/http.py", line 314, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/opt/odoo12/odoo/tools/pycompat.py", line 87, in reraise
raise value
File "/opt/odoo12/odoo/http.py", line 698, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo12/odoo/http.py", line 346, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo12/odoo/service/model.py", line 97, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo12/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "/opt/odoo12/odoo/http.py", line 941, in call
return self.method(*args, **kw)
File "/opt/odoo12/odoo/http.py", line 519, in response_wrap
response = f(*args, **kw)
File "/opt/odoo12/addons/web/controllers/main.py", line 966, in call_button
action = self._call_kw(model, method, args, {})
File "/opt/odoo12/addons/web/controllers/main.py", line 954, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo12/odoo/api.py", line 749, in call_kw
return _call_kw_multi(method, model, args, kwargs)
File "/opt/odoo12/odoo/api.py", line 736, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "", line 2, in button_immediate_install
File "/opt/odoo12/odoo/addons/base/models/ir_module.py", line 74, in check_and_log
return method(self, *args, **kwargs)
File "/opt/odoo12/odoo/addons/base/models/ir_module.py", line 445, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "/opt/odoo12/odoo/addons/base/models/ir_module.py", line 561, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "/opt/odoo12/odoo/modules/registry.py", line 86, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "/opt/odoo12/odoo/modules/loading.py", line 421, in load_modules
loaded_modules, update_module, models_to_check)
File "/opt/odoo12/odoo/modules/loading.py", line 313, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "/opt/odoo12/odoo/modules/loading.py", line 222, in load_module_graph
load_data(cr, idref, mode, kind='data', package=package, report=report)
File "/opt/odoo12/odoo/modules/loading.py", line 68, in load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)
File "/opt/odoo12/odoo/tools/convert.py", line 802, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/opt/odoo12/odoo/tools/convert.py", line 865, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File "/opt/odoo12/odoo/tools/convert.py", line 764, in parse
exc_info[2]
File "/opt/odoo12/odoo/tools/pycompat.py", line 86, in reraise
raise value.with_traceback(tb)
File "/opt/odoo12/odoo/tools/convert.py", line 758, in parse
self._tags[rec.tag](rec, de, mode=mode)
File "/opt/odoo12/odoo/tools/convert.py", line 663, in _tag_record
record = model.with_context(rec_context)._load_records([data], self.mode == 'update')
File "/opt/odoo12/odoo/models.py", line 3865, in _load_records
records = self._load_records_create([data['values'] for data in to_create])
File "/opt/odoo12/addons/website/models/ir_ui_view.py", line 129, in _load_records_create
records = super(View, self)._load_records_create(values)
File "/opt/odoo12/odoo/models.py", line 3779, in _load_records_create
return self.create(values)
File "", line 2, in create
File "/opt/odoo12/odoo/api.py", line 452, in _model_create_multi
return create(self, arg)
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 428, in create
return super(View, self).create(vals_list)
File "", line 2, in create
File "/opt/odoo12/odoo/api.py", line 452, in _model_create_multi
return create(self, arg)
File "/opt/odoo12/odoo/models.py", line 3596, in create
fields[0].determine_inverse(batch_recs)
File "/opt/odoo12/odoo/fields.py", line 1117, in determine_inverse
getattr(records, self.inverse)()
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 275, in _inverse_arch
view.write(data)
File "/opt/odoo12/addons/website/models/ir_ui_view.py", line 41, in write
return super(View, self).write(vals)
File "/opt/odoo12/odoo/addons/base/models/ir_ui_view.py", line 444, in write
return super(View, self).write(self._compute_defaults(vals))
File "/opt/odoo12/odoo/models.py", line 3321, in write
self._write(store_vals)
File "/opt/odoo12/odoo/models.py", line 3457, in _write
self._validate_fields(vals)
File "/opt/odoo12/odoo/models.py", line 1112, in validate_fields
raise ValidationError("%s\n\n%s" % (
("Error while validating constraint"), tools.ustr(e)))
odoo.tools.convert.ParseError: "Error mientras se validaban las restricciones

El elemento '' no puede ser localizado en la vista padre

Contexto del error:
Vista Trial Balance
[view_id: 2312, xml_id: n/a, model: account.balance.report, parent_id: 561]
None" while parsing /opt/odoo12/addons/accounting_pdf_reports/wizards/trial_balance.xml:4, near

Trial Balance
account.balance.report










Balance Sheet format in Odoo 13.0 and 14.0

Hi, my goal is to fix the accounting_pdf_reports, I intend to be a Odoo developer. If you may, could you please give me a hint to fix this?

The problem:
Currently, om_account_accountant does not follow the standard Balance Sheet format.

This problem is present in Odoo 13.0 and Odoo 14.0

Expected result
The Balance Sheet pdf use Asset = Liability + Equity format.

Actual result
The Balance Sheet pdf use Profit (Loss) to report format. I think that this is a mistake?

Financial Report.pdf

task_check_list - Per project

It would be great if we could assign the checklist to a project or even a task.
Would require a Many2one link to Project/Task
Any thoughts?

Regards
jordg

Account Implementation Wiard

Can we implement the "Account Implementation wizard" that shows on the menubar as progress and also in the settings dashboard?

[Odoo 15.0] - [accounting_pdf_reports] - Filters Issue

module: accounting_pdf_reports
version: 15.0

Steps to reproduce

1- Install accounting_pdf_reports
2- Print General Ledger and set filters such as from date , to date , entries ..etc

Current behavior
The printed data in the general ledger report is not filtered based on the set filters, e.g. if you set the dates, there will be items outside of that period.

Expected behavior
The data in the general ledger should be filtered based on the set filters in the wizard.

[14.0] no access rights on a model in the budget module

log warning:

2021-06-22 10:48:44,821 90436 WARNING v14project_2 odoo.modules.loading: The model account.bank.statement.import.journal.creation has no access rules, consider adding one. E.g. access_account_bank_statement_import_journal_creation,access_account_bank_statement_import_journal_creation,model_account_bank_statement_import_journal_creation,base.group_user,1,0,0,0 

not translated into spanish

I would like to collaborate with the translation of the modules into Spanish, can you indicate how I can help you in the translation

Multi-currency import

Can you say if this module supports adding columns for AMOUNT CURRENCY and CURRENCY to bank statement lines for multi-currency environment?

om_report_pdf_options

odoo 13.0 Bill Error

When i post Bill i get this Error:
File "/odoo/custom/odoomates/odooapps/om_account_asset/models/account.py", line 24, in post
return super(AccountMove, self).post(invoice=invoice)
TypeError: post() got an unexpected keyword argument 'invoice'

om_account_asset: Thoughts on converting float fields to monetary?

The asset module uses float fields for all currency fields and I'm wondering if we should change them to "monetary" fields?
Reasons:

  1. The current float fields are not rounded, and as a result the database stores values with many more decimal places than the company currency (see image below). Maybe this is okay & normal in the Odoo development world?
  2. A lot of work is done using float_compare and decimal precision, and I wonder if we made the fields monetary would some of this extra work go away?

Would love your thoughts.

Ken

image

[Odoo 15.0] - [om_account_followup] - Date Format on Report

Issue: The printed payment follow-up report is printing the date only in US date format while used in different language e.g german

File: /om_account_followup/report/followup_print.py

Function: def _lines_get_with_partner

original code: line_data = { 'name': line.move_id.name, 'ref': line.ref, 'date': line.date, 'date_maturity': line.date_maturity, 'balance': balance, 'blocked': line.blocked, 'currency_id': currency, }

possible change: line_data = { 'name': line.move_id.name, 'ref': line.ref, 'date': format_date(self.env, line.date), 'date_maturity': format_date(self.env, line.date_maturity), 'balance': balance, 'blocked': line.blocked, 'currency_id': currency, }
other changes: from odoo.tools import format_date

[15.0] Partner Ledger under Partners

Since there is no Odoo standard Due Payment report for partners, the Partner Ledger report can be used as a useful report to print partner balance report (Partner Ledger).

image

We have tested the change by adding below snippet to accounting_pdf_reports/wizard/partner_ledger.xml

<!-- Add to Partner Print button -->
    <record id="action_partner_report_partnerledger" model="ir.actions.act_window">
        <field name="name">Balance Statement (Partner Ledger)</field>
        <field name="res_model">account.report.partner.ledger</field>
        <field name="view_mode">form</field>
        <field name="view_id" ref="account_report_partner_ledger_view" />
        <field name="target">new</field>
        <field name="binding_model_id" ref="base.model_res_partner" />
        <field name="binding_type">report</field>
        <field name="context">{
            'default_partner_ids':active_ids,
            'default_target_move': 'posted',
            'default_result_selection': 'customer_supplier',
            'default_reconciled': True,
        }</field>
    </record>

Any idea if this should have some security group? before we create a PR.

Problem installing Assets app on Odoo 12

Fout:
Odoo Server Error

Traceback (most recent call last):
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 656, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 314, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\pycompat.py", line 87, in reraise
raise value
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 698, in dispatch
result = self._call_function(**self.params)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 346, in _call_function
return checked_call(self.db, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\service\model.py", line 97, in wrapper
return f(dbname, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 941, in call
return self.method(*args, **kw)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 519, in response_wrap
response = f(*args, **kw)
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\web\controllers\main.py", line 966, in call_button
action = self._call_kw(model, method, args, {})
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\web\controllers\main.py", line 954, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 749, in call_kw
return _call_kw_multi(method, model, args, kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 736, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "", line 2, in button_immediate_install
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 74, in check_and_log
return method(self, *args, **kwargs)
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 445, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 561, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\registry.py", line 86, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 421, in load_modules
loaded_modules, update_module, models_to_check)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 313, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\modules\loading.py", line 231, in load_module_graph
module.with_context(overwrite=overwrite)._update_translations()
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_module.py", line 885, in _update_translations
self.env['ir.translation'].load_module_terms(mod_names, filter_lang)
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_translation.py", line 825, in load_module_terms
tools.trans_load(self._cr, trans_file, lang, verbose=False, module_name=module_name, context=context)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\translate.py", line 1016, in trans_load
result = trans_load_data(cr, fileobj, fileformat, lang, verbose=verbose, module_name=module_name, context=context)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\translate.py", line 1160, in trans_load_data
irt_cursor.finish()
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\base\models\ir_translation.py", line 156, in finish
""" % (self._model_table, self._table))
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\sql_db.py", line 148, in wrapper
return f(self, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\sql_db.py", line 225, in execute
res = self._obj.execute(query, params)
psycopg2.ProgrammingError: ON CONFLICT DO UPDATE command cannot affect row a second time
HINT: Ensure that no rows proposed for insertion within the same command have duplicate constrained values.

ERROR: null value in column "date" violates not-null constraint

Odoo 13

When Asset is created directly within a Journal Entry (type = entry), attempting to Post returns error within UI

The operation cannot be completed:

  • Create/update: a mandatory field is not set.
  • Delete: another model requires the record being deleted. If possible, archive it instead.

Model: Asset/Revenue Recognition (account.asset.asset), Field: Date (date)

and error within DB

2022-04-22 01:54:00,068 6186 ERROR test odoo.sql_db: bad query: INSERT INTO "account_asset_asset" ("id", "create_uid", "create_date", "write_uid", "write_date", "account_analytic_id", "active", "category_id", "code", "company_id", "currency_id", "date", "date_first_depreciation", "invoice_id", "method", "method_end", "method_number", "method_period", "method_progress_factor", "method_time", "name", "partner_id", "prorata", "state", "value") VALUES (nextval('account_asset_asset_id_seq'), 2, (now() at time zone 'UTC'), 2, (now() at time zone 'UTC'), NULL, true, 1, '1', 1, 2, NULL, 'manual', 9, 'linear', NULL, 5, 12, 0.3, 'number', '1', NULL, false, 'draft', 0.0) RETURNING id
ERROR: null value in column "date" violates not-null constraint

Referencing: https://github.com/odoo/odoo/blob/13.0/addons/account/models/account_move.py

@api.model
def _get_default_invoice_date(self):
    return fields.Date.context_today(self) if self._context.get('default_type', 'entry') in self.get_purchase_types(include_receipts=True) else False

invoice_date is False

Hence asset_create() within https://github.com/odoomates/odooapps/blob/15.0/om_account_asset/models/account_move.py gets False resulting in error.

        vals = {
            'name': self.name,
            'code': self.name or False,
            'category_id': self.asset_category_id.id,
            'value': price_subtotal,
            'partner_id': self.move_id.partner_id.id,
            'company_id': self.move_id.company_id.id,
            'currency_id': self.move_id.company_currency_id.id,
            'date': self.move_id.invoice_date,
            'invoice_id': self.move_id.id,
        }

[16.0] account_asset: OWL error with asset creation

Installed om_account_accountant and om_account_asset modules (version 16.0.1.0.0) on a fresh Odoo 16 system.

Creating an asset (via 'Accounting → Assets' menu) results in following crash:

UncaughtPromiseError > OwlError
Uncaught Promise > An error occured in the owl lifecycle (see this Error's "cause" property)
OwlError: An error occured in the owl lifecycle (see this Error's "cause" property)
    OwlError@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:1204:1
    handleError@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:1211:101
    handleError@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:2028:29
    _render@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:1434:19
    render@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:1432:6
    initiateRender@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:1511:47

Caused by: TypeError: this.props.record.data[this.props.currencyField] is undefined
    get currencyId@http://localhost:8069/web/assets/202-dbc7672/web.assets_backend.min.js:3221:18
    get currency@http://localhost:8069/web/assets/202-dbc7672/web.assets_backend.min.js:3222:19
    template@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js line 1990 > Function:20:11
    _render@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:1433:96
    render@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:1432:6
    initiateRender@http://localhost:8069/web/assets/133-791a5fd/web.assets_common.min.js:1511:4

Please let me know if any additional troubleshooting information required,

om_account_asset: Assets are created each time a Vendor Bill goes through the process Confirm/Reset to Draft/Confirm

Bug Description

If you add an Asset Type to a product and then Confirm a Vendor Bill the system is designed to create an asset for you. If the Vendor Bill is then "Reset to Draft" and then Confirmed, another asset will be created. This is especially an issue if the user has enabled the Asset Type option "Auto-Confirm Assets" because the assets will be created in Running state and the cron job will post the depreciation lines as designed.

I've only tested this on v14 but reviewing the code there's no reason to suspect that the issue won't exist in all versions.

Steps to Reproduce

  1. Install the Purchase module.
  2. Create an Asset Type (either enable/disable the option "Auto-Confirm Assets".)
  3. Create a Product in the Purchase module with the Asset Type set on the Accounting tab.
  4. Create and confirm a Purchase Order for the product.
  5. Create a Vendor Bill from the Purchase Order and Confirm it. An Asset will be created as designed (it will be in Running state if Auto-Confirm Assets was enabled in the Asset Type definition.)
  6. On the Vendor Bill, click Reset to Draft.
  7. Confirm the Vendor Bill again. Another Asset will be created (again, it will be in Running state if Auto-Confirm Assets was enabled in the Asset Type definition.)

[14.0] Can not reset “posted” bank statement to “new” | error “You cannot modify a posted entry of this journal because it is in strict mode”

Suspected module:
om_account_accountant (not sure though; I really am not a programmer)

Summary of issue:
Unexpected error "You cannot modify a posted entry of this journal because it is in strict mode” when

  • trying to reconcile a posted bank statement
  • or trying to reset a posted bank statement to status "new".

Context
I just upgraded from Odoo13 to Odoo14 and I dó realize that the reconciliation function was moved to odoo enterprise.
However, the cúrrent behaviour of the bank statement reconciliation is (for me) unexpected:

  • Technicallly the system does not allow reconciliation until áfter posting the bank statement (the button "reconcile" does only appear áfter posting)
  • However when I try to do the reconciliation áfter posting, the system produces the error about strict mode
  • Same when I try to reset a posted bank statement to status "new".

The quick and dirty solution was already presented by one of the odoo mates colleagues:
This error is only raised when "Lock Posted Entries with Hash" in the journal is ticked. So when I unticked this box (using pgadmin) the application works as expected: It lets me reconcile and lets me reset to "new".

The question / improvement proposal
Not sure why the application was designed to do this "hash check on the journal". It seems that I am following a regular reconciliation proces which should also be allowed with "hash-protected" journals.

Further reference
I also reported this issue in the odoo help forum

ValueError: time data '٢٠٢٢-٠١-٢٨' does not match format '%Y-%m-%d' how fix it

خطأ:
Odoo Server Error

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
result = request.dispatch()
File "/usr/lib/python3/dist-packages/odoo/http.py", line 682, in dispatch
result = self._call_function(**self.params)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 358, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 346, in checked_call
result = self.endpoint(*a, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 911, in call
return self.method(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 530, in response_wrap
response = f(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1359, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1351, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 392, in call_kw
result = _call_kw_model(method, model, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 365, in _call_kw_model
result = method(recs, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/addons/hr_holidays/models/hr_leave.py", line 1244, in get_unusual_days
dfrom = datetime.combine(fields.Date.from_string(date_from), time.min).replace(tzinfo=UTC)
File "/usr/lib/python3/dist-packages/odoo/fields.py", line 1747, in to_date
return datetime.strptime(value, DATE_FORMAT).date()
File "/usr/lib/python3.8/_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/usr/lib/python3.8/_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/http.py", line 638, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 314, in _handle_exception
raise exception.with_traceback(None) from new_cause
ValueError: time data '٢٠٢٢-٠١-٢٨' does not match format '%Y-%m-%d'

Questions about repository maintenance and purpose

Hi.
First of all, thank you for porting the now missing modules from Oodo 11.0 to Odoo 12.0

As I see, this is quite a fresh repository and I have a few questions about it.

  1. What kind of modules can be expected to be added here?
  2. How much will it be maintained?
  3. Will you be accepting PRs?

These questions came up when I tried using module om_account_asset and it uses translations from Odoo 11.0 original module account_asset, which don't fully work for Odoo 12.0
I'm just wondering, if I should be creating issues in this repository about general problems like that.

Thanks.

[14.0] accounting_pdf_reports : Belgian Accounting - Intervat XML VAT declarations

Dear @odoomates

I am looking to generate the INTERVAT XML VAT DECLARATION for Belgian Accounting.

  • Periodical VAT Declaration
  • Periodical Intracom Declaration
  • Annual Listing of VAT-Subjected Customers

Previously in Odoo 8, I used : https://apps.odoo.com/apps/modules/8.0/l10n_be_coa_multilang/ but not migrated at all.

In odoo 14, I have seen : https://www.odoo.com/documentation/user/14.0/accounting/fiscal_localizations/overview/fiscal_localization_packages.html

image

But nothing in the Report

Best regards,

[14.0] om_account_asset: TypeError when Asset Type depreciation dates on Based on Last Day of Purchase Period

If the Asset Type of the current asset has a "Depreciation Dates" setting of "Based on Last Day of Purchase Period", the compute_depreciation_board method uses the Settings fiscalyear_last_month and fiscalyear_last_day, but the method treats the data as a string instead of an int and produces the error below. Converting the str to int using int() fixes the issue.

To reproduce the error:

  1. Create an Asset Type with "Depreciation Dates" as "Based on Last Day of Purchase Period".
  2. Create a new asset and set a value.
  3. Click the Compute Depreciation button. The error will occur.

`Error:
Odoo Server Error

Traceback (most recent call last):
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
result = request.dispatch()
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/http.py", line 684, in dispatch
result = self._call_function(**self.params)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/http.py", line 360, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/http.py", line 348, in checked_call
result = self.endpoint(*a, **kw)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/http.py", line 913, in call
return self.method(*args, **kw)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/http.py", line 532, in response_wrap
response = f(*args, **kw)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/addons/web/controllers/main.py", line 1389, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/addons/web/controllers/main.py", line 1381, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/api.py", line 397, in call_kw
result = _call_kw_model_create(method, model, args, kwargs)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/api.py", line 377, in _call_kw_model_create
result = method(recs, *args, **kwargs)
File "", line 2, in create
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/api.py", line 326, in _model_create_single
return create(self, arg)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/BPMI/odooapps/om_account_asset/models/account_asset.py", line 493, in create
asset.sudo().compute_depreciation_board()
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/BPMI/odooapps/om_account_asset/models/account_asset.py", line 283, in compute_depreciation_board
depreciation_date = depreciation_date + relativedelta(month=self.company_id.fiscalyear_last_month)
File "/Users/kenwoychesko/code-development/bpmi-addons/venv/lib/python3.8/site-packages/dateutil/relativedelta.py", line 396, in radd
return self.add(other)
File "/Users/kenwoychesko/code-development/bpmi-addons/venv/lib/python3.8/site-packages/dateutil/relativedelta.py", line 368, in add
day = min(calendar.monthrange(year, month)[1],
File "/Users/kenwoychesko/.pyenv/versions/3.8.11/lib/python3.8/calendar.py", line 123, in monthrange
if not 1 <= month <= 12:
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/http.py", line 640, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/Users/kenwoychesko/code-sources/odoo-related/14.0/odoo/odoo/http.py", line 316, in _handle_exception
raise exception.with_traceback(None) from new_cause
TypeError: '<=' not supported between instances of 'int' and 'str'`

[14.0.7.1.0] om_hr_payroll Field "hra" does not exist in model "hr.contract"

Hello,

I found issue when tried to upgrade existing module to the latest version 14.0.7.1.0 in my odoo 14, here the error log:

2021-10-14 20:59:24,715 3357682 INFO dbodoodev odoo.modules.loading: loading om_hr_payroll/views/hr_contract_views.xml 
2021-10-14 20:59:24,793 3357682 INFO dbodoodev odoo.addons.base.models.ir_ui_view: Field "hra" does not exist in model "hr.contract"

View name: hr.contract.view.form.inherit
Error context:
 view: ir.ui.view(3437,)
 xmlid: hr_contract_form_inherit
 view.model: hr.contract
 view.parent: ir.ui.view(1181,)
 file: /home/donatid/custom-addons/om_hr_payroll/views/hr_contract_views.xml
 
2021-10-14 20:59:24,805 3357682 WARNING dbodoodev odoo.modules.loading: Transient module states were reset 
2021-10-14 20:59:24,836 3357682 ERROR dbodoodev odoo.modules.registry: Failed to load registry 
2021-10-14 20:59:24,837 3357682 ERROR dbodoodev odoo.http: Exception during JSON request handling. 
Traceback (most recent call last):
  File "/home/donatid/odoo/odoo/tools/convert.py", line 677, in _tag_root
    f(rec)
  File "/home/donatid/odoo/odoo/tools/convert.py", line 580, in _tag_record
    record = model._load_records([data], self.mode == 'update')
  File "/home/donatid/odoo/odoo/models.py", line 4213, in _load_records
    records = self._load_records_create([data['values'] for data in to_create])
  File "/home/donatid/odoo/odoo/models.py", line 4142, in _load_records_create
    return self.create(values)
  File "<decorator-gen-43>", line 2, in create
  File "/home/donatid/odoo/odoo/api.py", line 345, in _model_create_multi
    return create(self, arg)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 482, in create
    return super(View, self).create(vals_list)
  File "<decorator-gen-65>", line 2, in create
  File "/home/donatid/odoo/odoo/api.py", line 345, in _model_create_multi
    return create(self, arg)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_fields.py", line 534, in create
    recs = super().create(vals_list)
  File "<decorator-gen-13>", line 2, in create
  File "/home/donatid/odoo/odoo/api.py", line 345, in _model_create_multi
    return create(self, arg)
  File "/home/donatid/odoo/odoo/models.py", line 3903, in create
    fields[0].determine_inverse(batch_recs)
  File "/home/donatid/odoo/odoo/fields.py", line 1185, in determine_inverse
    getattr(records, self.inverse)()
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 300, in _inverse_arch
    view.write(data)
  File "/home/donatid/odoo/addons/website/models/theme_models.py", line 267, in write
    res = super(IrUiView, other_views).write(vals)
  File "/home/donatid/odoo/addons/website/models/ir_ui_view.py", line 68, in write
    return super(View, self).write(vals)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 500, in write
    res = super(View, self).write(self._compute_defaults(vals))
  File "/home/donatid/odoo/odoo/models.py", line 3687, in write
    real_recs._validate_fields(vals, inverse_fields)
  File "/home/donatid/odoo/odoo/models.py", line 1266, in _validate_fields
    check(self)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 408, in _check_xml
    raise ValidationError(_(
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 391, in _check_xml
    view.postprocess_and_fields(view_doc, validate=True)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 851, in postprocess_and_fields
    arch, name_manager = self._postprocess_view(node, model, validate=validate)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 863, in _postprocess_view
    self.postprocess(node, [], editable, name_manager)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 963, in postprocess
    self.postprocess(child, current_node_path, node_info['editable'], name_manager)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 963, in postprocess
    self.postprocess(child, current_node_path, node_info['editable'], name_manager)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 963, in postprocess
    self.postprocess(child, current_node_path, node_info['editable'], name_manager)
  [Previous line repeated 4 more times]
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 954, in postprocess
    validator(node, name_manager, node_info)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 1090, in _validate_tag_field
    self.handle_view_error(msg)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_ui_view.py", line 673, in handle_view_error
    raise ValueError(formatted_message).with_traceback(from_traceback) from from_exception
odoo.exceptions.ValidationError: Error while validating view:

Field "hra" does not exist in model "hr.contract"

View name: hr.contract.view.form.inherit
Error context:
 view: ir.ui.view(3437,)
 xmlid: hr_contract_form_inherit
 view.model: hr.contract
 view.parent: ir.ui.view(1181,)
 file: /home/donatid/custom-addons/om_hr_payroll/views/hr_contract_views.xml


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/donatid/odoo/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
    result = request.dispatch()
  File "/home/donatid/odoo/odoo/http.py", line 684, in dispatch
    result = self._call_function(**self.params)
  File "/home/donatid/odoo/odoo/http.py", line 360, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/donatid/odoo/odoo/service/model.py", line 94, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/donatid/odoo/odoo/http.py", line 348, in checked_call
    result = self.endpoint(*a, **kw)
  File "/home/donatid/odoo/odoo/http.py", line 913, in __call__
    return self.method(*args, **kw)
  File "/home/donatid/odoo/odoo/http.py", line 532, in response_wrap
    response = f(*args, **kw)
  File "/home/donatid/odoo/addons/web/controllers/main.py", line 1393, in call_button
    action = self._call_kw(model, method, args, kwargs)
  File "/home/donatid/odoo/addons/web/controllers/main.py", line 1381, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/home/donatid/odoo/odoo/api.py", line 396, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/home/donatid/odoo/odoo/api.py", line 383, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-72>", line 2, in button_immediate_install
  File "/home/donatid/odoo/odoo/addons/base/models/ir_module.py", line 74, in check_and_log
    return method(self, *args, **kwargs)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_module.py", line 475, in button_immediate_install
    return self._button_immediate_function(type(self).button_install)
  File "/home/donatid/odoo/odoo/addons/base/models/ir_module.py", line 593, in _button_immediate_function
    modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "/home/donatid/odoo/odoo/modules/registry.py", line 89, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/home/donatid/odoo/odoo/modules/loading.py", line 459, in load_modules
    processed_modules += load_marked_modules(cr, graph,
  File "/home/donatid/odoo/odoo/modules/loading.py", line 347, in load_marked_modules
    loaded, processed = load_module_graph(
  File "/home/donatid/odoo/odoo/modules/loading.py", line 222, in load_module_graph
    load_data(cr, idref, mode, kind='data', package=package)
  File "/home/donatid/odoo/odoo/modules/loading.py", line 69, in load_data
    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind)
  File "/home/donatid/odoo/odoo/tools/convert.py", line 733, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate)
  File "/home/donatid/odoo/odoo/tools/convert.py", line 799, in convert_xml_import
    obj.parse(doc.getroot())
  File "/home/donatid/odoo/odoo/tools/convert.py", line 719, in parse
    self._tag_root(de)
  File "/home/donatid/odoo/odoo/tools/convert.py", line 681, in _tag_root
    raise ParseError('while parsing %s:%s, near\n%s' % (
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/donatid/odoo/odoo/http.py", line 640, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/donatid/odoo/odoo/http.py", line 316, in _handle_exception
    raise exception.with_traceback(None) from new_cause
odoo.tools.convert.ParseError: while parsing /home/donatid/custom-addons/om_hr_payroll/views/hr_contract_views.xml:16, near
<record id="hr_contract_form_inherit" model="ir.ui.view">
        <field name="name">hr.contract.view.form.inherit</field>
        <field name="model">hr.contract</field>
        <field name="inherit_id" ref="hr_contract.hr_contract_view_form"/>
        <field name="arch" type="xml">
            <data><xpath expr="//field[@name='job_id']" position="after">
                <field name="struct_id" required="1"/>
            </xpath>
            <xpath expr="//field[@name='job_id']" position="before">
                <field name="company_id" groups="base.group_multi_company"/>
                <field name="currency_id" invisible="1"/>
            </xpath>
            <xpath expr="//field[@name='resource_calendar_id']" position="after">
                <field name="schedule_pay"/>
            </xpath>

            <xpath expr="//page[@name='information']" position="after">
                <page name="other" position="move"/>
            </xpath>

            <xpath expr="//group[@name='salary_and_advantages']" position="after">
                <group string="Monthly Advantages in Cash" name="allowances">
                    <label for="hra"/>
                    <div class="o_row">
                        <field name="hra" nolabel="1"/>
                        <span>/ month</span>
                    </div>
                    <label for="da"/>
                    <div class="o_row">
                        <field name="da" nolabel="1"/>
                        <span>/ month</span>
                    </div>
                    <label for="travel_allowance"/>
                    <div class="o_row">

                        <field name="travel_allowance" nolabel="1"/>
                        <span>/ month</span>
                    </div>
                    <label for="meal_allowance"/>
                    <div class="o_row">

                        <field name="meal_allowance" nolabel="1"/>
                        <span>/ month</span>
                    </div>
                    <label for="medical_allowance"/>
                    <div class="o_row">

                        <field name="medical_allowance" nolabel="1"/>
                        <span>/ month</span>
                    </div>
                    <label for="other_allowance"/>
                    <div class="o_row">

                        <field name="other_allowance" nolabel="1"/>
                        <span>/ month</span>
                    </div>
                </group>
            </xpath>
        </data></field>
    </record>

If you have any questions please let me know.

Thank you for your help and great works.

Br,
David

Many2one account.tax.report.line.report_id from Model to TransientModel is forbidden

2019-12-08 14:17:51,815 107394 WARNING odoo odoo.modules.loading: Transient module states were reset
2019-12-08 14:17:51,823 107394 ERROR odoo odoo.modules.registry: Failed to load registry
2019-12-08 14:17:51,824 107394 ERROR odoo odoo.http: Exception during JSON request handling.
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 677, in dispatch
    result = self._call_function(**self.params)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 353, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 93, in wrapper
    return f(dbname, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 346, in checked_call
    result = self.endpoint(*a, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 922, in __call__
    return self.method(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 523, in response_wrap
    response = f(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1323, in call_button
    action = self._call_kw(model, method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1311, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 394, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 381, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-65>", line 2, in button_immediate_upgrade
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 72, in check_and_log
    return method(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 634, in button_immediate_upgrade
    return self._button_immediate_function(type(self).button_upgrade)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 578, in _button_immediate_function
    modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 85, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 416, in load_modules
    force, status, report, loaded_modules, update_module, models_to_check)
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 312, in load_marked_modules
    perform_checks=perform_checks, models_to_check=models_to_check
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 195, in load_module_graph
    registry.init_models(cr, model_names, {'module': package.name})
  File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 320, in init_models
    model._auto_init()
  File "/usr/lib/python3/dist-packages/odoo/models.py", line 2464, in _auto_init
    new = field.update_db(self, columns)
  File "/usr/lib/python3/dist-packages/odoo/fields.py", line 2385, in update_db
    raise ValueError('Many2one %s from Model to TransientModel is forbidden' % self)
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 632, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 317, in _handle_exception
    raise exception.with_traceback(None) from new_cause
ValueError: Many2one account.tax.report.line.report_id from Model to TransientModel is forbidden

Error after installation odoo 15

Hello,

After the installation in Odoo 15 I got the following error while trying to modify anything in the setting page:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
result = request.dispatch()
File "/usr/lib/python3/dist-packages/odoo/http.py", line 687, in dispatch
result = self._call_function(**self.params)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 359, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 348, in checked_call
result = self.endpoint(*a, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 916, in call
return self.method(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 535, in response_wrap
response = f(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1332, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1324, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 459, in call_kw
result = _call_kw_model_create(method, model, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 439, in _call_kw_model_create
result = method(recs, *args, **kwargs)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 388, in _model_create_single
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/res_config.py", line 782, in create
return super(ResConfigSettings, self).create(values)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 409, in _model_create_multi
return create(self, [arg])
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_fields.py", line 613, in create
recs = super().create(vals_list)
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 410, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 4064, in create
records = self._create(data_list)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 4214, in _create
field.create([
File "/usr/lib/python3/dist-packages/odoo/fields.py", line 2185, in create
env['ir.attachment'].sudo().with_context(
File "", line 2, in create
File "/usr/lib/python3/dist-packages/odoo/api.py", line 410, in _model_create_multi
return create(self, arg)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_attachment.py", line 561, in create
values = self._check_contents(values)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_attachment.py", line 298, in _check_contents
mimetype = values['mimetype'] = self._compute_mimetype(values)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_attachment.py", line 292, in _compute_mimetype
raw = base64.b64decode(values['datas'])
File "/usr/lib/python3.9/base64.py", line 87, in b64decode
return binascii.a2b_base64(s)
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/http.py", line 643, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 301, in _handle_exception
raise exception.with_traceback(None) from new_cause
binascii.Error: Incorrect padding

When reconciling using the Widget, the Reconciliation Model is not referring to the Partner in the Widget

module: om_account_accountant
Odoo version: 13.0

Description
During reconciliation, when users select Partner for the statement line, the reconciliation models with "Partner is Set" rules should refresh which would auto-fill the statement line. This is currently not the case. When a partner is selected, Odoo should check the reconciliation model again to see if there's any rules related to the partner.

I think this bug has recently been addressed in Odoo_master under issue "[IMP] account: misc improvements of reconciliation models #55031" with this commit:

[FIX] account: partner mapping and model order
Because we used the same variable to compute the partner, it was
overriden once we went through a model with a partner mapping, and kept
for models with lesser priority.
Also remove the key param to sort the recocniliation models. We want the
models to be sorted according like in the list view, and that is exactly
what the .sorted() function does without params. (no need to worry about
changing it if we change the _order)

Steps to Reproduce
Let's say I have PartnerA which has a statement line "Gas" where I want to set a reconciliation model for.

  1. Create a Reconcile Rule which contains "Gas" and with Partner Set to PartnerA
  2. In the reconciliation screen, if the statement line does not have Payee already assigned; the reconciliation rule is not triggered (which is correct).
  3. However, when the user manually select PartnerA for the bank statement line, one would expect the reconciliation model to be triggered which would auto-fill the details. This is currently not the case.

[14.0] Bank statement import is only importing last row from the Excel template as many times as there are rows in the bank statement

Please see the attached image where there is Excel template with 2 bank statement rows and screenshot from the Odoo after that has been imported. Only the last row in the bank statement has been imported 2 times (because there were 2 rows in the Excel).

Note that module is also adding ".0" to the label. My target is to import Payment Reference in the Label column and use that for reconciliation. Workaraund to solve that .0-issue is to change Excel field format from General to Text.

Thanks for your support,
Mikko

image

[12.0] Error while printing PDF

Error while printing PDF of any of the reports. It works OK with any other modules. If I configure them as HTML the report works fine.

ERROR Vignelli odoo.addons.website.models.ir_http: 500 Internal Server Error:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/api.py", line 1049, in get
value = self._data[key][field][record._ids[0]]
KeyError: 7

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/fields.py", line 1012, in get
value = record.env.cache.get(record, self)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 1051, in get
raise CacheMiss(record, field)
odoo.exceptions.CacheMiss: ('account.common.journal.report(7,).company_id', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 208, in _dispatch
result = request.dispatch()
File "/usr/lib/python3/dist-packages/odoo/http.py", line 835, in dispatch
r = self._call_function(**self.params)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 346, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 98, in wrapper
return f(dbname, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 941, in call
return self.method(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 519, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/aeroo_reports/report_aeroo/controllers/main.py", line 36, in report_routes
**data)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 519, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/reporting-engine-oca/report_xlsx_helper/controllers/main.py", line 54, in report_routes
reportname, docids, converter, **data)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 519, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/reporting-engine-oca/report_xlsx/controllers/main.py", line 59, in report_routes
reportname, docids, converter, **data
File "/usr/lib/python3/dist-packages/odoo/http.py", line 519, in response_wrap
response = f(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1616, in report_routes
pdf = report.with_context(context).render_qweb_pdf(docids, data=data)[0]
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_actions_report.py", line 727, in render_qweb_pdf
html = self.with_context(context).render_qweb_html(res_ids, data=data)[0]
File "/opt/odoo/reporting-engine/report_extended/models/ir_actions_report.py", line 204, in render_qweb_html
self = self._extend_report_context(docids, data=data)
File "/opt/odoo/reporting-engine/report_extended_stock/models/report.py", line 64, in _extend_report_context
docids, data=data)
File "/opt/odoo/reporting-engine/report_extended_sale/models/report.py", line 32, in _extend_report_context
docids, data=data)
File "/opt/odoo/reporting-engine/report_extended_payment_group/models/report_payment_group.py", line 48, in _extend_report_context
docids, data=data)
File "/opt/odoo/reporting-engine/report_extended_account/models/report_invoice.py", line 106, in _extend_report_context
docids, data=data)
File "/opt/odoo/reporting-engine/report_extended/models/ir_actions_report.py", line 128, in _extend_report_context
if recs and 'company_id' in recs._fields and recs[0].company_id:
File "/usr/lib/python3/dist-packages/odoo/fields.py", line 1019, in get
value = record.env.cache.get(record, self)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 1053, in get
return value.get() if isinstance(value, SpecialValue) else value
File "/usr/lib/python3/dist-packages/odoo/api.py", line 1096, in getter
raise exception
File "/usr/lib/python3/dist-packages/odoo/models.py", line 2820, in read
vals[name] = convert(record[name], record, use_name_get)
File "/usr/lib/python3/dist-packages/odoo/models.py", line 5148, in getitem
return self._fields[key].get(self, type(self))
File "/usr/lib/python3/dist-packages/odoo/fields.py", line 1012, in get
value = record.env.cache.get(record, self)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 1053, in get
return value.get() if isinstance(value, SpecialValue) else value
File "/usr/lib/python3/dist-packages/odoo/api.py", line 1096, in getter
raise exception
odoo.exceptions.MissingError: ('El registro no existe o ha sido eliminado.\n\n(Registros: account.common.journal.report(7,), Usuario: 10)', None)

[14.0] om_account_asset: assets purchased in foreign currency booked at wrong value

When purchasing a fixed asset in foreign currency, the asset's value is created at the foreign currency purchase price instead of being converted to the company's local currency, yet the currency for the asset is set in the local currency. For example:

  1. Create a company with local currency CAD.
  2. Enable multi-currencies and enter an exchange rate for USD of 0.8
  3. Create a Purchase Order in USD (i.e. the foreign currency) for a product that has been setup to create a fixed asset. Amount: USD$1,000
  4. Create the Vendor Bill for USD$1,000.
  5. The asset is created with the currency symbol set as "CAD" and the value of $1,000 ==> the correct value is $1,250.00 (i.e. $1,000 / 0.8 = $1,250). The symbol "CAD" is correct. Under GAAP and IFRS accounting rules an asset is tracked in the company's local currency even if it was purchased in foreign currency. I'm not sure about other accounting standards.

I tested Odoo CE v11's built-in account_asset module and it works according to GAAP and IFRS. For example:

  1. Create a company with local currency CAD.
  2. Enable multi-currencies and enter an exchange rate for USD of 0.8
  3. Create a Purchase Order in USD (i.e. the foreign currency) for a product that has been setup to create a fixed asset. Amount: USD$1,000
  4. Create the Vendor Bill for USD$1,000.
  5. The asset is created with the value of CAD$1,250. and with depreciations in CAD.

Possible solution:
The problem is because we are using the value from the account_move_line's price_subtotal field (File: om_account_asset/models/account_move.py. Class: AccountMoveLine. Method: asset_create). I think we could use the debit field instead, but I don't know enough about the accounting model to be 100% sure.

Odoo 14 Account Bank Statement Import by Odoo Mates , Odoo S.A.

Hi

Thank you for the assistance offered.

Please error below.

I am trying to import the attached file.

The first error talks to the Excel data format. COnverted it into the correct format using a CSV file. Then when importing the file it gave me the error below.

I am doing something Wrong.

Best regards'
Thor

Error:
Odoo Server Error

Traceback (most recent call last):
File "C:\GitHub\odoo\odoo\addons\base\models\ir_http.py", line 237, in _dispatch
result = request.dispatch()
File "C:\GitHub\odoo\odoo\http.py", line 684, in dispatch
result = self._call_function(**self.params)
File "C:\GitHub\odoo\odoo\http.py", line 360, in _call_function
return checked_call(self.db, *args, **kwargs)
File "C:\GitHub\odoo\odoo\service\model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "C:\GitHub\odoo\odoo\http.py", line 348, in checked_call
result = self.endpoint(*a, **kw)
File "C:\GitHub\odoo\odoo\http.py", line 913, in call
return self.method(*args, **kw)
File "C:\GitHub\odoo\odoo\http.py", line 532, in response_wrap
response = f(*args, **kw)
File "c:\github\odoo\addons\web\controllers\main.
02 November - 628077201695.xlsx
py", line 1393, in call_button
action = self._call_kw(model, method, args, kwargs)
File "c:\github\odoo\addons\web\controllers\main.py", line 1381, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "C:\GitHub\odoo\odoo\api.py", line 396, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "C:\GitHub\odoo\odoo\api.py", line 383, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "C:\GitHub\odoo\odoo\addons\om_account_bank_statement_import\account_bank_statement_import.py", line 135, in import_file
statement = self.create_statement(statement_vals)
File "C:\GitHub\odoo\odoo\addons\om_account_bank_statement_import\account_bank_statement_import.py", line 55, in create_statement
statement = self.env['account.bank.statement'].create(values)
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 344, in _model_create_multi
return create(self, [arg])
File "c:\github\odoo\addons\account\models\account_bank_statement.py", line 275, in create
res = super(AccountBankStatement, self).create(values)
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 345, in _model_create_multi
return create(self, arg)
File "c:\github\odoo\addons\mail\models\mail_thread.py", line 264, in create
threads = super(MailThread, self).create(vals_list)
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 345, in _model_create_multi
return create(self, arg)
File "C:\GitHub\odoo\odoo\addons\base\models\ir_fields.py", line 534, in create
recs = super().create(vals_list)
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 345, in _model_create_multi
return create(self, arg)
File "C:\GitHub\odoo\odoo\models.py", line 3864, in create
records = self._create(data_list)
File "C:\GitHub\odoo\odoo\models.py", line 4024, in _create
for other, data in zip(others, data_list)
File "C:\GitHub\odoo\odoo\fields.py", line 3041, in create
self.write_batch(record_values, True)
File "C:\GitHub\odoo\odoo\fields.py", line 3067, in write_batch
return self.write_real(records_commands_list, create)
File "C:\GitHub\odoo\odoo\fields.py", line 3239, in write_real
flush()
File "C:\GitHub\odoo\odoo\fields.py", line 3203, in flush
comodel.create(to_create)
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 345, in _model_create_multi
return create(self, arg)
File "c:\github\odoo\addons\account\models\account_bank_statement.py", line 859, in create
st_lines = super().create(vals_list)
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 345, in _model_create_multi
return create(self, arg)
File "C:\GitHub\odoo\odoo\addons\base\models\ir_fields.py", line 534, in create
recs = super().create(vals_list)
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 345, in _model_create_multi
return create(self, arg)
File "C:\GitHub\odoo\odoo\models.py", line 3858, in create
for data in parent_data_list
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 345, in _model_create_multi
return create(self, arg)
File "c:\github\odoo\addons\purchase\models\account_invoice.py", line 103, in create
moves = super(AccountMove, self).create(vals_list)
File "", line 2, in create
File "C:\GitHub\odoo\odoo\api.py", line 345, in _model_create_multi
return create(self, arg)
File "c:\github\odoo\addons\account\models\account_move.py", line 1938, in create
vals_list = self._move_autocomplete_invoice_lines_create(vals_list)
File "c:\github\odoo\addons\account\models\account_move.py", line 1895, in _move_autocomplete_invoice_lines_create
move = self_ctx.new(vals)
File "C:\GitHub\odoo\odoo\models.py", line 5502, in new
record._update_cache(values, validate=False)
File "C:\GitHub\odoo\odoo\models.py", line 5148, in _update_cache
cache.set(self, field, field.convert_to_cache(value, self, validate))
File "C:\GitHub\odoo\odoo\fields.py", line 1834, in convert_to_cache
return self.to_date(value)
File "C:\GitHub\odoo\odoo\fields.py", line 1809, in to_date
return datetime.strptime(value, DATE_FORMAT).date()
File "C:\Users\thors\AppData\Local\Programs\Python\Python37\lib_strptime.py", line 577, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "C:\Users\thors\AppData\Local\Programs\Python\Python37\lib_strptime.py", line 359, in _strptime
(data_string, format))
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\GitHub\odoo\odoo\http.py", line 640, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "C:\GitHub\odoo\odoo\http.py", line 316, in _handle_exception
raise exception.with_traceback(None) from new_cause
ValueError: time data '44502.0' does not match format '%Y-%m-%d'

[14.0] om_account_asset: Duplicate messages posted to chatter if asset type has Group Journal Entries set

When the cron job runs to post depreciation lines, one of the tasks performed is posting a message to the chatter about what it has done. If an asset type has Group Journal Entries set, then all of its related assets' chatters will have messages posted twice. This is because the method post_lines_and_close_asset is called twice for grouped assets.
First call in create_grouped_move:
image

Second call:
In the above method, the method post is called, which again calls post_lines_and_close_asset:

image

This results in the message being posted twice:
image

The first call should be removed (i.e. in the create_grouped_move method.) This solves the problem, and will make the code more similar to the code for non-grouped asset types (i.e. the create_move method).

[Odoo 15.0] - [om_hr_payroll] - Refund Issue

module: om_hr_payroll
version: 15.0

Steps to reproduce

1- Using fresh Odoo 15.0
2- Install om_hr_payroll
3- Create Salary Rule with Input (using python code e.g. inputs.XYZ.amount)
4- Create Payslip and Confirm, payslip will be created without any issues
5- Refund the same payslip

Current behavior
User Error: Wrong python code defined for salary rule ... (XYZ)

Expected behavior
Refund should be created.

Notes: it seems when the payslip is copied, the inputs(input_line_ids) are not copied in the refund, setting copy=True in input_line_ids seems to solve the issue.
Go To Line

Payroll with more than 1 Leave rules in Odoo13

I have 2 rules for leaves in my structure, it say:

Error:
om_hr_payroll/models/hr_payslip.py", line 173, in get_worked_day_lines
'name': holiday.holiday_status_id.name or _('Global Leaves'),
File "/odoo/odoo-server/odoo/fields.py", line 979, in get
record.ensure_one()
File "/odoo/odoo-server/odoo/models.py", line 4984, in ensure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: hr.leave.type(5, 4)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.