diff options
| author | Christophe Simonis <chs@odoo.com> | 2017-03-13 16:22:57 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2017-03-13 16:22:57 +0100 |
| commit | 777a87cde8fbee8495c95891d5cb2104cf9160e6 (patch) | |
| tree | 6a1ff070a975ba530ce851ad4ec22d1eba18f2bd /addons | |
| parent | 62c9cae2699055d32dc872f269e68ca5c1f34889 (diff) | |
| parent | 2ef43281c26b7511f4a884530ff01db876fc5ad2 (diff) | |
[MERGE] forward port branch 10.0 up to 2ef43281c26
Diffstat (limited to 'addons')
45 files changed, 531 insertions, 930 deletions
diff --git a/addons/account/models/account_bank_statement.py b/addons/account/models/account_bank_statement.py index c0ddcdc7099..882172dd917 100644 --- a/addons/account/models/account_bank_statement.py +++ b/addons/account/models/account_bank_statement.py @@ -266,12 +266,12 @@ class AccountBankStatement(models.Model): """ Changes statement state to Running.""" for statement in self: if not statement.name: - context = {'ir_sequence_date', statement.date} + context = {'ir_sequence_date': statement.date} if statement.journal_id.sequence_id: - st_number = statement.journal_id.sequence_id.with_context(context).next_by_id() + st_number = statement.journal_id.sequence_id.with_context(**context).next_by_id() else: SequenceObj = self.env['ir.sequence'] - st_number = SequenceObj.with_context(context).next_by_code('account.bank.statement') + st_number = SequenceObj.with_context(**context).next_by_code('account.bank.statement') statement.name = st_number statement.state = 'open' diff --git a/addons/account/views/account_view.xml b/addons/account/views/account_view.xml index 091ebf21daa..0e71985b557 100644 --- a/addons/account/views/account_view.xml +++ b/addons/account/views/account_view.xml @@ -1053,7 +1053,7 @@ class="oe_link" type="object" string="-> View partially reconciled entries" - attrs="{'invisible': ['|', ('full_reconcile_id', '=', True), '&', ('matched_debit_ids', '=', []),('matched_credit_ids', '=', [])]}"> + attrs="{'invisible': ['|', ('full_reconcile_id', '!=', False), '&', ('matched_debit_ids', '=', []),('matched_credit_ids', '=', [])]}"> </button> </div> </group> diff --git a/addons/account/views/report_invoice.xml b/addons/account/views/report_invoice.xml index 67f99a43fe6..9809cf93e54 100644 --- a/addons/account/views/report_invoice.xml +++ b/addons/account/views/report_invoice.xml @@ -171,6 +171,8 @@ <xpath expr="//h2" position="replace"> <h2> <span>Duplicate</span> + <span t-if="o.type == 'out_refund'">refund</span> + <span t-if="o.type == 'out_invoice'">invoice</span> <span t-field="o.number"/> </h2> </xpath> diff --git a/addons/board/static/src/js/dashboard.js b/addons/board/static/src/js/dashboard.js index eb458812a57..68e45762593 100644 --- a/addons/board/static/src/js/dashboard.js +++ b/addons/board/static/src/js/dashboard.js @@ -181,6 +181,8 @@ var DashBoard = form_common.FormWidget.extend({ action = result, view_mode = action_attrs.view_mode; + if (!action) { return; } + // evaluate action_attrs context and domain action_attrs.context_string = action_attrs.context; action_attrs.context = pyeval.eval( diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py index d55b35ae36c..2c3fa12fa5e 100644 --- a/addons/calendar/models/calendar.py +++ b/addons/calendar/models/calendar.py @@ -527,9 +527,23 @@ class Meeting(models.Model): return partners @api.multi - def _get_recurrent_date_by_event(self): - """ Get recurrent dates based on Rule string and all event where recurrent_id is child """ + def _get_recurrent_dates_by_event(self): + """ Get recurrent start and stop dates based on Rule string""" + start_dates = self._get_recurrent_date_by_event(date_field='start') + stop_dates = self._get_recurrent_date_by_event(date_field='stop') + return zip(start_dates, stop_dates) + + @api.multi + def _get_recurrent_date_by_event(self, date_field='start'): + """ Get recurrent dates based on Rule string and all event where recurrent_id is child + + date_field: the field containing the reference date information for recurrency computation + """ self.ensure_one() + if date_field in self._fields.keys() and self._fields[date_field].type in ('date', 'datetime'): + reference_date = self[date_field] + else: + reference_date = self.start def todate(date): val = parser.parse(''.join((re.compile('\d')).findall(date))) @@ -539,14 +553,14 @@ class Meeting(models.Model): return val.astimezone(timezone) timezone = pytz.timezone(self._context.get('tz') or 'UTC') - startdate = pytz.UTC.localize(fields.Datetime.from_string(self.start)) # Add "+hh:mm" timezone - if not startdate: - startdate = datetime.now() + event_date = pytz.UTC.localize(fields.Datetime.from_string(reference_date)) # Add "+hh:mm" timezone + if not event_date: + event_date = datetime.now() - # Convert the start date to saved timezone (or context tz) as it'll + # Convert the event date to saved timezone (or context tz) as it'll # define the correct hour/day asked by the user to repeat for recurrence. - startdate = startdate.astimezone(timezone) # transform "+hh:mm" timezone - rset1 = rrule.rrulestr(str(self.rrule), dtstart=startdate, forceset=True) + event_date = event_date.astimezone(timezone) # transform "+hh:mm" timezone + rset1 = rrule.rrulestr(str(self.rrule), dtstart=event_date, forceset=True) recurring_meetings = self.search([('recurrent_id', '=', self.id), '|', ('active', '=', False), ('active', '=', True)]) for meeting in recurring_meetings: @@ -998,27 +1012,38 @@ class Meeting(models.Model): result.append(meeting.id) result_data.append(meeting.get_search_fields(order_fields)) continue - rdates = meeting._get_recurrent_date_by_event() + rdates = meeting._get_recurrent_dates_by_event() - for r_date in rdates: + for r_start_date, r_stop_date in rdates: # fix domain evaluation # step 1: check date and replace expression by True or False, replace other expressions by True # step 2: evaluation of & and | # check if there are one False pile = [] ok = True + r_date = r_start_date # default for empty domain for arg in domain: if str(arg[0]) in ('start', 'stop', 'final_date'): + if str(arg[0]) == 'start': + r_date = r_start_date + else: + r_date = r_stop_date + if arg[2] and len(arg[2]) > len(r_date.strftime(DEFAULT_SERVER_DATE_FORMAT)): + dformat = DEFAULT_SERVER_DATETIME_FORMAT + else: + dformat = DEFAULT_SERVER_DATE_FORMAT if (arg[1] == '='): - ok = r_date.strftime('%Y-%m-%d') == arg[2] + ok = r_date.strftime(dformat) == arg[2] if (arg[1] == '>'): - ok = r_date.strftime('%Y-%m-%d') > arg[2] + ok = r_date.strftime(dformat) > arg[2] if (arg[1] == '<'): - ok = r_date.strftime('%Y-%m-%d') < arg[2] + ok = r_date.strftime(dformat) < arg[2] if (arg[1] == '>='): - ok = r_date.strftime('%Y-%m-%d') >= arg[2] + ok = r_date.strftime(dformat) >= arg[2] if (arg[1] == '<='): - ok = r_date.strftime('%Y-%m-%d') <= arg[2] + ok = r_date.strftime(dformat) <= arg[2] + if (arg[1] == '!='): + ok = r_date.strftime(dformat) != arg[2] pile.append(ok) elif str(arg) == str('&') or str(arg) == str('|'): pile.append(arg) @@ -1534,6 +1559,18 @@ class Meeting(models.Model): if not self._context.get('virtual_id', True): return super(Meeting, self).search(new_args, offset=offset, limit=limit, order=order, count=count) + if any(arg[0] == 'start' for arg in args) and \ + not any(arg[0] in ('stop', 'final_date') for arg in args): + # domain with a start filter but with no stop clause should be extended + # e.g. start=2017-01-01, count=5 => virtual occurences must be included in ('start', '>', '2017-01-02') + start_args = new_args + new_args = [] + for arg in start_args: + new_arg = arg + if arg[0] in ('start_date', 'start_datetime', 'start',): + new_args += ['|', '&', ('recurrency', '=', 1), ('final_date', arg[1], arg[2])] + new_args.append(new_arg) + # offset, limit, order and count must be treated separately as we may need to deal with virtual ids events = super(Meeting, self).search(new_args, offset=0, limit=0, order=None, count=False) events = self.browse(events.get_recurrent_ids(args, order=order)) diff --git a/addons/calendar/tests/test_calendar_recurrent_event_case2.py b/addons/calendar/tests/test_calendar_recurrent_event_case2.py index da39fa6509b..e05428593ae 100644 --- a/addons/calendar/tests/test_calendar_recurrent_event_case2.py +++ b/addons/calendar/tests/test_calendar_recurrent_event_case2.py @@ -96,3 +96,52 @@ class TestRecurrentEvent(common.TransactionCase): # I update the description of two meetings, and check that both have been updated self.calendar_event_sprint_review.write({'description': "Some description"}) self.assertEqual(self.calendar_event_sprint_review.description, "Some description", "Event %d has not been updated" % self.calendar_event_sprint_review.id) + + def test_recurrent_meeting4(self): + # I create a weekly meeting till a particular end date. + self.CalendarEvent.create({ + 'start': '2017-01-22 11:47:00', + 'stop': '2017-01-22 12:47:00', + 'day': 0.0, + 'duration': 1.0, + 'final_date': '2017-06-30', + 'end_type': 'end_date', + 'fr': True, + 'mo': True, + 'th': True, + 'tu': True, + 'we': True, + 'name': 'Review code with programmer', + 'recurrency': True, + 'rrule_type': 'weekly' + }) + + # I search for a recurrent weekly meetings that take place at a given date. + meetings_count = self.CalendarEvent.with_context({'virtual_id': True}).search_count([ + ('start', '<=', '2017-01-24'), ('stop', '>=', '2017-01-24'), ('name', '=', 'Review code with programmer') + ]) + self.assertEqual(meetings_count, 1, 'Recurrent weekly meetings are not found using date filter !') + + # I search for a recurrent weekly meetings that take place at a given date and time. + meetings_count = self.CalendarEvent.with_context({'virtual_id': True}).search_count([ + ('start', '<=', '2017-01-24 11:55:00'), ('stop', '>=', '2017-01-24 11:55:00'), ('name', '=', 'Review code with programmer') + ]) + self.assertEqual(meetings_count, 1, 'Recurrent weekly meetings are not found using time filter !') + + # I search using the filter 'start date is set' + meetings_count = self.CalendarEvent.with_context({'virtual_id': True}).search_count([ + ('start', '!=', False), ('stop', '>=', '2017-06-30 11:55:00'), ('name', '=', 'Review code with programmer') + ]) + self.assertEqual(meetings_count, 1, "Last recurrent weekly meetings are not found using 'is set' filter !") + + # I search for a recurrent weekly meetings that take place at a given date and time. + meetings_count = self.CalendarEvent.with_context({'virtual_id': True}).search_count([ + ('start', '<=', '2017-01-24 11:55:00'), ('stop', '>=', '2017-01-24 15:55:00') + ]) + self.assertEqual(meetings_count, 0, 'Too late recurrent meetings are found using time filter !') + + # I search using a start filter but no stop + meetings_count = self.CalendarEvent.with_context({'virtual_id': True}).search_count([ + ('start', '>=', '2017-06-30 08:00:00'), ('name', '=', 'Review code with programmer') + ]) + self.assertEqual(meetings_count, 1, "Last recurrent weekly meetings are not found without stop filter !") diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index a86d64cdac9..c0614c034e0 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -466,24 +466,21 @@ class Lead(models.Model): """ title = "%s : %s\n" % (_('Merged opportunity') if self.type == 'opportunity' else _('Merged lead'), self.name) body = [title] - for field_name in fields: - field = self._fields.get(field_name) - if field is None: - continue - - value = self[field_name] - if field.type == 'selection': + fields = self.env['ir.model.fields'].search([('name', 'in', fields or []), ('model_id.model', '=', self._name)]) + for field in fields: + value = self[field.name] + if field.ttype == 'selection': value = dict(field.get_values(self.env)).get(value, value) - elif field.type == 'many2one': + elif field.ttype == 'many2one': if value: value = value.sudo().name_get()[0][1] - elif field.type == 'many2many': + elif field.ttype == 'many2many': if value: value = ','.join( val.name_get()[0][1] for val in value.sudo() ) - body.append("%s: %s" % (field.string, value or '')) + body.append("%s: %s" % (field.field_description, value or '')) return "<br/>".join(body + ['<br/>']) @api.multi diff --git a/addons/crm/views/crm_team_views.xml b/addons/crm/views/crm_team_views.xml index ed45e69378a..7b007b8a531 100644 --- a/addons/crm/views/crm_team_views.xml +++ b/addons/crm/views/crm_team_views.xml @@ -146,6 +146,7 @@ <field name="type">ir.actions.act_window</field> <field name="view_type">form</field> <field name="view_mode">form</field> + <field name="view_id" ref="crm_case_form_view_oppor"/> <field name="domain">[('type','=','opportunity')]</field> <field name="context">{ 'search_default_team_id': [active_id], diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index eb56429708a..085ff53bda3 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -5,7 +5,7 @@ import re from odoo import api, fields, models, _ from odoo.exceptions import UserError -from odoo.tools import email_split +from odoo.tools import email_split, float_is_zero import odoo.addons.decimal_precision as dp @@ -511,7 +511,9 @@ class HrExpenseSheet(models.Model): if any(not sheet.journal_id for sheet in self): raise UserError(_("Expenses must have an expense journal specified to generate accounting entries.")) - res = self.mapped('expense_line_ids').action_move_create() + res = self.mapped('expense_line_ids')\ + .filtered(lambda r: not float_is_zero(r.total_amount, precision_rounding=(r.currency_id or self.env.user.company_id.currency_id).rounding))\ + .action_move_create() if not self.accounting_date: self.accounting_date = self.account_move_id.date diff --git a/addons/hr_expense/security/ir_rule.xml b/addons/hr_expense/security/ir_rule.xml index e084a2b9283..61aba78d7ed 100644 --- a/addons/hr_expense/security/ir_rule.xml +++ b/addons/hr_expense/security/ir_rule.xml @@ -20,6 +20,12 @@ <field eval="True" name="global"/> <field name="domain_force">['|',('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field> </record> + <record id="hr_expense_report_comp_rule" model="ir.rule"> + <field name="name">Expense Report multi company rule</field> + <field name="model_id" ref="model_hr_expense_sheet"/> + <field eval="True" name="global"/> + <field name="domain_force">['|',('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field> + </record> </data> </odoo> diff --git a/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py index e4c05fbd2b1..cc94bd6aec5 100644 --- a/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py @@ -152,7 +152,7 @@ class HrTimesheetSheet(models.Model): analytic_timesheet_toremove = self.env['account.analytic.line'] for sheet in self: - analytic_timesheet_toremove += sheet.timesheet_ids + analytic_timesheet_toremove += sheet.timesheet_ids.filtered(lambda t: not t.task_id) analytic_timesheet_toremove.unlink() return super(HrTimesheetSheet, self).unlink() diff --git a/addons/im_livechat/views/im_livechat_channel_templates.xml b/addons/im_livechat/views/im_livechat_channel_templates.xml index 0e3a4b911c8..0e5b476942a 100644 --- a/addons/im_livechat/views/im_livechat_channel_templates.xml +++ b/addons/im_livechat/views/im_livechat_channel_templates.xml @@ -126,7 +126,6 @@ <script type="text/javascript" src="/web/static/src/js/framework/local_storage.js"></script> <script type="text/javascript" src="/web/static/src/js/framework/qweb.js"></script> <script type="text/javascript" src="/web/static/src/js/services/core.js"></script> - <script type="text/javascript" src="/web/static/src/js/services/session.js"></script> <!-- Bus, Mail, Livechat --> <script type="text/javascript" src="/bus/static/src/js/bus.js"></script> <script type="text/javascript" src="/mail/static/src/js/chat_window.js"></script> diff --git a/addons/l10n_cn_standard/__init__.py b/addons/l10n_cn_standard/__init__.py index 7e7e19a411a..8e0bd7042c7 100644 --- a/addons/l10n_cn_standard/__init__.py +++ b/addons/l10n_cn_standard/__init__.py @@ -1,4 +1,8 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -# Copyright (C) 2007-2014 Jeff Wang(<http://jeff@osbzr.com>). +# Copyright (C) 2008-2008 凯源吕鑫 lvxin@gmail.com <basic chart data> +# 维智众源 oldrev@gmail.com <states data> +# Copyright (C) 2012-2012 南京盈通 ccdos@intoerp.com <small business chart> +# Copyright (C) 2008-now 开阖软件 jeff@osbzr.com < PM and LTS > +# Copyright (C) 2017-now jeffery9@gmail.com diff --git a/addons/l10n_cn_standard/__manifest__.py b/addons/l10n_cn_standard/__manifest__.py index 465dbaa8da7..e29a1a4ecc1 100644 --- a/addons/l10n_cn_standard/__manifest__.py +++ b/addons/l10n_cn_standard/__manifest__.py @@ -5,26 +5,35 @@ # 维智众源 oldrev@gmail.com <states data> # Copyright (C) 2012-2012 南京盈通 ccdos@intoerp.com <small business chart> # Copyright (C) 2008-now 开阖软件 jeff@osbzr.com < PM and LTS > +# Copyright (C) 2017-now jeffery9@gmail.com { - 'name': '中国会计科目表-企业会计准则', - 'version': '1.8', + 'name': '会计科目表 - 中国企业会计准则', + 'version': '2.0', 'category': 'Localization', - 'author': 'www.openerp-china.org', - 'maintainer': 'jeff@osbzr.com', - 'website': 'http://openerp-china.org', + 'author': ['lvxin@gmail.co', 'oldrev@gmail.co', 'ccdos@intoerp.com', 'jeff@osbzr.com', 'jeffery9@gmail.com'], + + 'website': 'http://shine-it.net', 'description': """ +Including the following data in the Accounting Standards for Business Enterprises +包含企业会计准则以下数据 - 科目类型\会计科目表模板\增值税\辅助核算类别\管理会计凭证簿\财务会计凭证簿 +* Chart of Accounts +* 科目表模板 - 添加中文省份数据 +* Account templates +* 科目模板 - 增加小企业会计科目表 +* Tax templates +* 税金模板 """, 'depends': ['l10n_cn'], 'data': [ 'data/l10n_cn_standard_chart_data.xml', + 'data/account.account.template.csv', + 'data/account_tax_templates.xml', + 'data/account_chart_template_data.xml', 'data/account_chart_template_data.yml', ], 'license': 'GPL-3', diff --git a/addons/l10n_cn_standard/data/account.account.template.csv b/addons/l10n_cn_standard/data/account.account.template.csv new file mode 100644 index 00000000000..0cc206754be --- /dev/null +++ b/addons/l10n_cn_standard/data/account.account.template.csv @@ -0,0 +1,174 @@ +id,code,name,reconcile,user_type_id/id,chart_template_id/id +account_1011,1011,存放同业,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1012,1012,其他货币资金,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1021,1021,结算备付金,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1031,1031,存出保证金,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1101,1101,交易性金融资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1111,1111,买入返售金融资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1121,1121,应收票据,TRUE,account.data_account_type_receivable,l10n_chart_china_standard_business +account_1122,1122,应收账款,TRUE,account.data_account_type_receivable,l10n_chart_china_standard_business +account_1123,1123,预付账款,TRUE,account.data_account_type_receivable,l10n_chart_china_standard_business +account_1131,1131,应收股利,TRUE,account.data_account_type_receivable,l10n_chart_china_standard_business +account_1132,1132,应收利息,TRUE,account.data_account_type_receivable,l10n_chart_china_standard_business +account_1201,1201,应收代位追偿款,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1211,1211,应收分保账款,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1212,1212,应收分保合同准备金,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1221,1221,其他应收款,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1231,1231,坏账准备,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1301,1301,贴现资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1302,1302,拆出资金,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1303,1303,贷款,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1304,1304,贷款损失准备,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1311,1311,代理兑付证券,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1321,1321,代理业务资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1401,1401,材料采购,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1402,1402,在途物资,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1403,1403,原材料,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1404,1404,材料成本差异,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1405,1405,库存商品,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1406,1406,发出商品,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1407,1407,商品进销差价,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1408,1408,委托加工物资,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1411,1411,周转材料,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1421,1421,消耗性生物资产,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1431,1431,贵金属,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1441,1441,抵债资产,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1451,1451,损余物资,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1461,1461,融资租赁资产,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1471,1471,存货跌价准备,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1501,1501,持有至到期投资,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1502,1502,持有至到期投资减值准备,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1503,1503,可供出售金融资产,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1511,1511,长期股权投资,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1512,1512,长期股权投资减值准备,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1521,1521,投资性房地产,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1531,1531,长期应收款,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1532,1532,未实现融资收益,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1541,1541,存出资本保证金,FALSE,account.data_account_type_non_current_assets,l10n_chart_china_standard_business +account_1601,1601,固定资产,FALSE,account.data_account_type_fixed_assets,l10n_chart_china_standard_business +account_1602,1602,累计折旧,FALSE,account.data_account_type_fixed_assets,l10n_chart_china_standard_business +account_1603,1603,固定资产减值准备,FALSE,account.data_account_type_fixed_assets,l10n_chart_china_standard_business +account_1604,1604,在建工程,FALSE,account.data_account_type_fixed_assets,l10n_chart_china_standard_business +account_1605,1605,工程物资,FALSE,account.data_account_type_fixed_assets,l10n_chart_china_standard_business +account_1606,1606,固定资产清理,FALSE,account.data_account_type_fixed_assets,l10n_chart_china_standard_business +account_1611,1611,未担保余值,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1621,1621,生产性生物资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1622,1622,生产性生物资产累计折旧,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1623,1623,公益性生物资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1631,1631,油气资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1632,1632,累计折耗,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1701,1701,无形资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1702,1702,累计摊销,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1703,1703,无形资产减值准备,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1711,1711,商誉,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1801,1801,长期待摊费用,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1811,1811,递延所得税资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1821,1821,独立账户资产,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_1901,1901,待处理财产损溢,FALSE,account.data_account_type_current_assets,l10n_chart_china_standard_business +account_2001,2001,短期借款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2002,2002,存入保证金,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2003,2003,拆入资金,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2004,2004,向中央银行借款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2011,2011,吸收存款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2012,2012,同业存放,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2021,2021,贴现负债,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2101,2101,交易性金融负债,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2111,2111,卖出回购金融资产款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2201,2201,应付票据,TRUE,account.data_account_type_payable,l10n_chart_china_standard_business +account_2202,2202,应付账款,TRUE,account.data_account_type_payable,l10n_chart_china_standard_business +account_2203,2203,预收账款,TRUE,account.data_account_type_payable,l10n_chart_china_standard_business +account_2211,2211,应付职工薪酬,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221,2221,应交税费,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_1,2221.01.01,进项税额,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_2,2221.01.02,已交税金,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_3,2221.01.03,转出未交增值税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_4,2221.01.04,减免税款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_5,2221.01.05,销项税额,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_6,2221.01.06,出口退税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_7,2221.01.07,进项税额转出,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_8,2221.01.08,出口抵减内销产品应纳税额,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_9,2221.01.09,转出多交增值税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_1_10,2221.01.10,未交增值税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_2,2221.02,应交营业税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_3,2221.03,应交消费税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_4,2221.04,应交资源税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_5,2221.05,应交所得税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_6,2221.06,应交土地增值税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_7,2221.07,应交城市维护建设税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_8,2221.08,应交房产税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_9,2221.09,应交土地使用税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_10,2221.10,应交车船使用税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2221_11,2221.11,应交个人所得税,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2231,2231,应付利息,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2232,2232,应付股利,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2241,2241,其他应付款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2251,2251,应付保单红利,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2261,2261,应付分保账款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2311,2311,代理买卖证券款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2312,2312,代理承销证券款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2313,2313,代理兑付证券款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2314,2314,代理业务负债,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2401,2401,递延收益,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2501,2501,长期借款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2502,2502,应付债券,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2601,2601,未到期责任准备金,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2602,2602,保险责任准备金,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2611,2611,保户储金,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2621,2621,独立账户负债,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2701,2701,长期应付款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2702,2702,未确认融资费用,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2711,2711,专项应付款,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2801,2801,预计负债,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_2901,2901,递延所得税负债,FALSE,account.data_account_type_current_liabilities,l10n_chart_china_standard_business +account_3001,3001,清算资金往来,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_3002,3002,货币兑换,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_3101,3101,衍生工具,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_3201,3201,套期工具,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_3202,3202,被套期项目,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_4001,4001,实收资本,FALSE,account.data_account_type_equity,l10n_chart_china_standard_business +account_4002,4002,资本公积,FALSE,account.data_account_type_equity,l10n_chart_china_standard_business +account_4101,4101,盈余公积,FALSE,account.data_account_type_equity,l10n_chart_china_standard_business +account_4102,4102,一般风险准备,FALSE,account.data_account_type_equity,l10n_chart_china_standard_business +account_4103,4103,本年利润,FALSE,account.data_account_type_equity,l10n_chart_china_standard_business +account_4104,4104,利润分配,FALSE,account.data_account_type_equity,l10n_chart_china_standard_business +account_4201,4201,库存股,FALSE,account.data_account_type_equity,l10n_chart_china_standard_business +account_5001,5001,生产成本,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_5101,5101,制造费用,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_5201,5201,劳务成本,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_5301,5301,研发支出,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_5401,5401,工程施工,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_5402,5402,工程结算,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_5403,5403,机械作业,FALSE,l10n_cn.user_type_all,l10n_chart_china_standard_business +account_6001,6001,主营业务收入,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6011,6011,利息收入,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6021,6021,手续费及佣金收入,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6031,6031,保费收入,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6041,6041,租赁收入,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6051,6051,其他业务收入,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6061,6061,汇兑损益,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6101,6101,公允价值变动损益,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6111,6111,投资收益,FALSE,account.data_account_type_revenue,l10n_chart_china_standard_business +account_6201,6201,摊回保险责任准备金,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6202,6202,摊回赔付支出,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6203,6203,摊回分保费用,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6301,6301,营业外收入,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6401,6401,主营业务成本,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6402,6402,其他业务成本,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6403,6403,营业税金及附加,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6411,6411,利息支出,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6421,6421,手续费及佣金支出,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6501,6501,提取未到期责任准备金,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6502,6502,提取保险责任准备金,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6511,6511,赔付支出,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6521,6521,保单红利支出,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6531,6531,退保金,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6541,6541,分出保费,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6542,6542,分保费用,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6601,6601,销售费用,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6602,6602,管理费用,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6603,6603,财务费用,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6604,6604,勘探费用,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6701,6701,资产减值损失,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6711,6711,营业外支出,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6801,6801,所得税费用,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business +account_6901,6901,以前年度损益调整,FALSE,account.data_account_type_expenses,l10n_chart_china_standard_business
\ No newline at end of file diff --git a/addons/l10n_cn_standard/data/account_chart_template_data.xml b/addons/l10n_cn_standard/data/account_chart_template_data.xml new file mode 100644 index 00000000000..4302c9f5c5c --- /dev/null +++ b/addons/l10n_cn_standard/data/account_chart_template_data.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + + <data noupdate="1"> + <record id="l10n_chart_china_standard_business" model="account.chart.template"> + <field name="property_account_receivable_id" ref="account_1122" /> + <field name="property_account_payable_id" ref="account_2202" /> + <field name="property_account_expense_categ_id" ref="account_6401" /> + <field name="property_account_income_categ_id" ref="account_6001" /> + <field name="income_currency_exchange_account_id" ref="account_6061" /> + <field name="expense_currency_exchange_account_id" ref="account_6061" /> + </record> + <record id="l10n_chart_china_standard_business_value" model="ir.values"> + <field name="name">中国会计科目表 (财会[2006]3号《企业会计准则》)</field> + <field name="model">account.chart.template</field> + <field name="key">default</field> + <field name="res_id" ref="l10n_chart_china_standard_business" /> + <field name="value" ref="base.CNY" /> + </record> + </data> +</odoo> diff --git a/addons/l10n_cn_standard/data/account_tax_templates.xml b/addons/l10n_cn_standard/data/account_tax_templates.xml new file mode 100644 index 00000000000..6dc3deef4cc --- /dev/null +++ b/addons/l10n_cn_standard/data/account_tax_templates.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + + <data noupdate="1"> + <!-- Account Tax --> + <record id="tag1" model="account.account.tag"> + <field name="name">增值税17%销项税</field> + <field name="applicability">taxes</field> + </record> + <record id="tag2" model="account.account.tag"> + <field name="name">增值税17%进项税</field> + <field name="applicability">taxes</field> + </record> + <record id="vats_standard_business" model="account.tax.template"> + <field name="name">增值税17%销项税 - 中国会计科目表-企业会计准则</field> + <field name="amount_type">percent</field> + <field name="amount" eval="17" /> + <field name="type_tax_use">sale</field> + <field name="account_id" ref="account_2221_1_5" /> + <field name="refund_account_id" ref="account_2221_1_5" /> + <field name="tag_ids" eval="[(6, 0, [ref('tag1')])]" /> + <field name="chart_template_id" ref="l10n_chart_china_standard_business" /> + </record> + <record id="vatp_standard_business" model="account.tax.template"> + <field name="name">增值税17%进项税 - 中国会计科目表-企业会计准则</field> + <field name="amount" eval="17" /> + <field name="type_tax_use">purchase</field> + <field name="amount_type">percent</field> + <field name="account_id" ref="account_2221_1_1" /> + <field name="refund_account_id" ref="account_2221_1_1" /> + <field name="tag_ids" eval="[(6, 0, [ref('tag2')])]" /> + <field name="chart_template_id" ref="l10n_chart_china_standard_business" /> + </record> + </data> +</odoo> diff --git a/addons/l10n_cn_standard/data/l10n_cn_standard_chart_data.xml b/addons/l10n_cn_standard/data/l10n_cn_standard_chart_data.xml index 79371410418..8fa9fee4a0e 100644 --- a/addons/l10n_cn_standard/data/l10n_cn_standard_chart_data.xml +++ b/addons/l10n_cn_standard/data/l10n_cn_standard_chart_data.xml @@ -1,794 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> -<!-- - Copyright (C) 2008-2008 凯源吕鑫 lvxin@gmail.com <basic chart data> - Copyright (C) 2008-now 开阖软件 jeff@osbzr.com < PM and LTS > - - 会计科目表模板 ---> - <data noupdate="1"> - - <record id="chart10003" model="account.account.template"> + <record id="account_1003" model="account.account.template"> <field name="name">转让帐户</field> <field name="code">1003</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> + <field name="reconcile" eval="True" /> + <field name="user_type_id" ref="account.data_account_type_current_assets" /> </record> - <!-- Chart template --> <record id="l10n_chart_china_standard_business" model="account.chart.template"> - <field name="name">中国会计科目表 (财会[2006]3号《企业会计准则》</field> - <field name="code_digits" eval="4"/> - <field name="currency_id" ref="base.CNY"/> + <field name="name">中国会计科目表 (财会[2006]3号《企业会计准则》</field> + <field name="code_digits" eval="4" /> + <field name="currency_id" ref="base.CNY" /> <field name="cash_account_code_prefix">1001</field> <field name="bank_account_code_prefix">1002</field> - <field name="transfer_account_id" ref="chart10003"/> - </record> - <record id="chart10003" model="account.account.template"> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - - <!-- 会计科目 --> - <record id="chart1015" model="account.account.template"> - <field name="code">1015</field> - <field name="name">其他货币资金</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1101" model="account.account.template"> - <field name="code">1101</field> - <field name="name">交易性金融资产</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1121" model="account.account.template"> - <field name="code">1121</field> - <field name="name">应收票据</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1122" model="account.account.template"> - <field name="code">1122</field> - <field name="name">应收账款</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_receivable"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1123" model="account.account.template"> - <field name="code">1123</field> - <field name="name">预付账款</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_receivable"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1131" model="account.account.template"> - <field name="code">1131</field> - <field name="name">应收股利</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1132" model="account.account.template"> - <field name="code">1132</field> - <field name="name">应收利息</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1231" model="account.account.template"> - <field name="code">1231</field> - <field name="name">其他应收款</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1241" model="account.account.template"> - <field name="code">1241</field> - <field name="name">坏账准备</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_receivable"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1401" model="account.account.template"> - <field name="code">1401</field> - <field name="name">材料采购</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1402" model="account.account.template"> - <field name="code">1402</field> - <field name="name">在途物资</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1403" model="account.account.template"> - <field name="code">1403</field> - <field name="name">原材料</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1404" model="account.account.template"> - <field name="code">1404</field> - <field name="name">材料成本差异</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1406" model="account.account.template"> - <field name="code">1406</field> - <field name="name">库存商品</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1407" model="account.account.template"> - <field name="code">1407</field> - <field name="name">发出商品</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1410" model="account.account.template"> - <field name="code">1410</field> - <field name="name">商品进销差价</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1411" model="account.account.template"> - <field name="code">1411</field> - <field name="name">委托加工物资</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1412" model="account.account.template"> - <field name="code">1412</field> - <field name="name">包装物及低值易耗品</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1461" model="account.account.template"> - <field name="code">1461</field> - <field name="name">存货跌价准备</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1501" model="account.account.template"> - <field name="code">1501</field> - <field name="name">待摊费用</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1521" model="account.account.template"> - <field name="code">1521</field> - <field name="name">持有至到期投资</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1522" model="account.account.template"> - <field name="code">1522</field> - <field name="name">持有至到期投资减值准备</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1524" model="account.account.template"> - <field name="code">1524</field> - <field name="name">长期股权投资</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1525" model="account.account.template"> - <field name="code">1525</field> - <field name="name">长期投资减值准备</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1421" model="account.account.template"> - <field name="code">1531</field> - <field name="name">长期应收款</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1601" model="account.account.template"> - <field name="code">1601</field> - <field name="name">固定资产</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1602" model="account.account.template"> - <field name="code">1602</field> - <field name="name">累计折旧</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1603" model="account.account.template"> - <field name="code">1603</field> - <field name="name">固定资产减值准备</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1604" model="account.account.template"> - <field name="code">1604</field> - <field name="name">在建工程</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1605" model="account.account.template"> - <field name="code">1605</field> - <field name="name">工程物资</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1606" model="account.account.template"> - <field name="code">1606</field> - <field name="name">固定资产清理</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_non_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1701" model="account.account.template"> - <field name="code">1701</field> - <field name="name">无形资产</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1703" model="account.account.template"> - <field name="code">1703</field> - <field name="name">无形资产减值准备</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1711" model="account.account.template"> - <field name="code">1711</field> - <field name="name">商誉</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1801" model="account.account.template"> - <field name="code">1801</field> - <field name="name">长期待摊费用</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1811" model="account.account.template"> - <field name="code">1811</field> - <field name="name">递延所得税资产</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_assets"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart1901" model="account.account.template"> - <field name="code">1901</field> - <field name="name">待处理财产损溢</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2001" model="account.account.template"> - <field name="code">2001</field> - <field name="name">短期借款</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2101" model="account.account.template"> - <field name="code">2101</field> - <field name="name">交易性金融负债</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2201" model="account.account.template"> - <field name="code">2201</field> - <field name="name">应付票据</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2202" model="account.account.template"> - <field name="code">2202</field> - <field name="name">应付账款</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_payable"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2205" model="account.account.template"> - <field name="code">2205</field> - <field name="name">预收账款</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2211" model="account.account.template"> - <field name="code">2211</field> - <field name="name">应付职工薪酬</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210101" model="account.account.template"> - <field name="code">22210101</field> - <field name="name">进项税额</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210102" model="account.account.template"> - <field name="code">22210102</field> - <field name="name">已交税金</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210103" model="account.account.template"> - <field name="code">22210103</field> - <field name="name">转出未交增值税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210104" model="account.account.template"> - <field name="code">22210104</field> - <field name="name">减免税款</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210105" model="account.account.template"> - <field name="code">22210105</field> - <field name="name">销项税额</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210106" model="account.account.template"> - <field name="code">22210106</field> - <field name="name">出口退税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210107" model="account.account.template"> - <field name="code">22210107</field> - <field name="name">进项税额转出</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210108" model="account.account.template"> - <field name="code">22210108</field> - <field name="name">出口抵减内销产品应纳税额</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210109" model="account.account.template"> - <field name="code">22210109</field> - <field name="name">转出多交增值税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart22210110" model="account.account.template"> - <field name="code">22210110</field> - <field name="name">未交增值税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart222102" model="account.account.template"> - <field name="code">222102</field> - <field name="name">应交营业税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart222103" model="account.account.template"> - <field name="code">222103</field> - <field name="name">应交消费税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> + <field name="transfer_account_id" ref="account_1003" /> </record> - <record id="chart222104" model="account.account.template"> - <field name="code">222104</field> - <field name="name">应交资源税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> + <record id="account_1003" model="account.account.template"> + <field name="chart_template_id" ref="l10n_chart_china_standard_business" /> </record> - <record id="chart222105" model="account.account.template"> - <field name="code">222105</field> - <field name="name">应交所得税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart222106" model="account.account.template"> - <field name="code">222106</field> - <field name="name">应交土地增值税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart222107" model="account.account.template"> - <field name="code">222107</field> - <field name="name">应交城市维护建设税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart222108" model="account.account.template"> - <field name="code">222108</field> - <field name="name">应交房产税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart222109" model="account.account.template"> - <field name="code">222109</field> - <field name="name">应交土地使用税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart222110" model="account.account.template"> - <field name="code">222110</field> - <field name="name">应交车船使用税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart222111" model="account.account.template"> - <field name="code">222111</field> - <field name="name">应交个人所得税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2231" model="account.account.template"> - <field name="code">2231</field> - <field name="name">应付股利</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2232" model="account.account.template"> - <field name="code">2232</field> - <field name="name">应付利息</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2241" model="account.account.template"> - <field name="code">2241</field> - <field name="name">其他应付款</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2401" model="account.account.template"> - <field name="code">2401</field> - <field name="name">预提费用</field> - <field name="reconcile" eval="True"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2601" model="account.account.template"> - <field name="code">2601</field> - <field name="name">长期借款</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2602" model="account.account.template"> - <field name="code">2602</field> - <field name="name">长期债券</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2801" model="account.account.template"> - <field name="code">2801</field> - <field name="name">长期应付款</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart2901" model="account.account.template"> - <field name="code">2901</field> - <field name="name">递延所得税负债</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart3101" model="account.account.template"> - <field name="code">3101</field> - <field name="name">衍生工具</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="l10n_cn.user_type_all"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart3102" model="account.account.template"> - <field name="code">3102</field> - <field name="name">套期工具</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="l10n_cn.user_type_all"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart3202" model="account.account.template"> - <field name="code">3202</field> - <field name="name">被套期项目</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="l10n_cn.user_type_all"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart4001" model="account.account.template"> - <field name="code">4001</field> - <field name="name">实收资本</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart4002" model="account.account.template"> - <field name="code">4002</field> - <field name="name">资本公积</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart4101" model="account.account.template"> - <field name="code">4101</field> - <field name="name">盈余公积</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart4103" model="account.account.template"> - <field name="code">4103</field> - <field name="name">本年利润</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart4104" model="account.account.template"> - <field name="code">4104</field> - <field name="name">利润分配</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart4201" model="account.account.template"> - <field name="code">4201</field> - <field name="name">库存股</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="l10n_cn.user_type_all"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart5001" model="account.account.template"> - <field name="code">5001</field> - <field name="name">生产成本</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="l10n_cn.user_type_all"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart5101" model="account.account.template"> - <field name="code">5101</field> - <field name="name">制造费用</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="l10n_cn.user_type_all"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart5201" model="account.account.template"> - <field name="code">5201</field> - <field name="name">劳务成本</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="l10n_cn.user_type_all"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart5301" model="account.account.template"> - <field name="code">5301</field> - <field name="name">研发支出</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="l10n_cn.user_type_all"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6001" model="account.account.template"> - <field name="code">6001</field> - <field name="name">主营业务收入</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_revenue"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6051" model="account.account.template"> - <field name="code">6051</field> - <field name="name">其他业务收入</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_revenue"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6101" model="account.account.template"> - <field name="code">6101</field> - <field name="name">公允价值变动损益</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_revenue"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6111" model="account.account.template"> - <field name="code">6111</field> - <field name="name">投资收益</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_revenue"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6301" model="account.account.template"> - <field name="code">6301</field> - <field name="name">营业外收入</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_revenue"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6401" model="account.account.template"> - <field name="code">6401</field> - <field name="name">主营业务成本</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6402" model="account.account.template"> - <field name="code">6402</field> - <field name="name">其他业务支出</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_revenue"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6405" model="account.account.template"> - <field name="code">6405</field> - <field name="name">营业税金及附加</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6601" model="account.account.template"> - <field name="code">6601</field> - <field name="name">销售费用</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6602" model="account.account.template"> - <field name="code">6602</field> - <field name="name">管理费用</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6603" model="account.account.template"> - <field name="code">6603</field> - <field name="name">财务费用</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6701" model="account.account.template"> - <field name="code">6701</field> - <field name="name">资产减值损失</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6711" model="account.account.template"> - <field name="code">6711</field> - <field name="name">营业外支出</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6801" model="account.account.template"> - <field name="code">6801</field> - <field name="name">所得税</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_expenses"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart6901" model="account.account.template"> - <field name="code">6901</field> - <field name="name">以前年度损益调整</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - - <record id="chart7001" model="account.account.template"> - <field name="code">7001</field> - <field name="name">增益账户</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="chart7002" model="account.account.template"> - <field name="code">7002</field> - <field name="name">损益表</field> - <field name="reconcile" eval="False"/> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - - - <record id="l10n_chart_china_standard_business" model="account.chart.template"> - <field name="property_account_receivable_id" ref="chart1122"/> - <field name="property_account_payable_id" ref="chart2202"/> - <field name="property_account_expense_categ_id" ref="chart1401"/> - <field name="property_account_income_categ_id" ref="chart6001"/> - <field name="income_currency_exchange_account_id" ref="chart7001"/> - <field name="expense_currency_exchange_account_id" ref="chart7002"/> - </record> - - <record id="l10n_chart_china_standard_business_value" model="ir.values"> - <field name="name">中国会计科目表 (财会[2006]3号《企业会计准则》)</field> - <field name="model">account.chart.template</field> - <field name="key">default</field> - <field name="res_id" ref="l10n_chart_china_standard_business"/> - <field name="value" ref="base.CNY"/> - </record> - - - <!-- Account Tax --> - <record id="tag1" model="account.account.tag"> - <field name="name">增值税17%销项税</field> - <field name="applicability">taxes</field> - </record> - <record id="tag2" model="account.account.tag"> - <field name="name">增值税17%进项税</field> - <field name="applicability">taxes</field> - </record> - - <record id="vats_standard_business" model="account.tax.template"> - <field name="name">增值税17%销项税 - 中国会计科目表-企业会计准则</field> - <field name="amount_type">percent</field> - <field name="amount" eval="17"/> - <field name="type_tax_use">sale</field> - <field name="account_id" ref="chart22210105"/> - <field name="refund_account_id" ref="chart22210105"/> - <field name="tag_ids" eval="[(6, 0, [ref('tag1')])]"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - <record id="vatp_standard_business" model="account.tax.template"> - <field name="name">增值税17%进项税 - 中国会计科目表-企业会计准则</field> - <field name="amount" eval="17"/> - <field name="type_tax_use">purchase</field> - <field name="amount_type">percent</field> - <field name="account_id" ref="chart22210101"/> - <field name="refund_account_id" ref="chart22210101"/> - <field name="tag_ids" eval="[(6, 0, [ref('tag2')])]"/> - <field name="chart_template_id" ref="l10n_chart_china_standard_business"/> - </record> - </data> </odoo> diff --git a/addons/l10n_fr/data/account_chart_template_data.xml b/addons/l10n_fr/data/account_chart_template_data.xml index f797e164605..429e5b3030e 100644 --- a/addons/l10n_fr/data/account_chart_template_data.xml +++ b/addons/l10n_fr/data/account_chart_template_data.xml @@ -239,7 +239,7 @@ <record id="pcg_120" model="account.account.template"> <field name="name">Résultat de l'exercice (bénéfice)</field> <field name="code">120</field> - <field name="user_type_id" ref="account.data_account_type_current_liabilities"/> + <field name="user_type_id" ref="account.data_unaffected_earnings"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> </record> @@ -4032,6 +4032,13 @@ <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> </record> + <record id="pcg_649" model="account.account.template"> + <field name="name">Crédit d’Impôt Compétitivité Emploi (CICE)</field> + <field name="code">649</field> + <field name="user_type_id" ref="account.data_account_type_expenses"/> + <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> + </record> + <record id="pcg_6511" model="account.account.template"> <field name="name">Redevances pour concessions brevets, licences, marques, procédés, logiciels </field> <field name="code">6511</field> diff --git a/addons/mail/models/mail_template.py b/addons/mail/models/mail_template.py index 0576bd66db7..9a5b6f83c2e 100644 --- a/addons/mail/models/mail_template.py +++ b/addons/mail/models/mail_template.py @@ -20,6 +20,8 @@ _logger = logging.getLogger(__name__) def format_date(env, date, pattern=False): + if not date: + return '' date = datetime.datetime.strptime(date[:10], tools.DEFAULT_SERVER_DATE_FORMAT) lang_code = env.context.get('lang') or 'en_US' if not pattern: diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 828cdaf865b..216aca10619 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -1364,9 +1364,9 @@ class MailThread(models.AbstractModel): to_remove.append(node) if node.tag == 'img' and node.get('src', '').startswith('cid:'): cid = node.get('src').split(':', 1)[1] - related_attachment = [attach for attach in attachments if len(attach) == 2 and attach[2] == cid] + related_attachment = [attach for attach in attachments if attach[2] and attach[2].get('cid') == cid] if related_attachment: - node.set('data-filename', related_attachment[0]) + node.set('data-filename', related_attachment[0][0]) postprocessed = True for node in to_remove: diff --git a/addons/mail/static/src/js/utils.js b/addons/mail/static/src/js/utils.js index 2c30a82701e..3bc730d15e8 100644 --- a/addons/mail/static/src/js/utils.js +++ b/addons/mail/static/src/js/utils.js @@ -59,8 +59,9 @@ function _parse_and_transform(nodes, transform_function) { }).join(""); } -// suggested regexp (gruber url matching regexp, adapted to js, see https://gist.github.com/gruber/8891611) -var url_regexp = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi; +// Suggested URL Javascript regex of http://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url +// Adapted to make http(s):// not required if (and only if) www. is given. So `should.notmatch` does not match. +var url_regexp = /\b(?:https?:\/\/|(www\.))[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,13}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/gi; function linkify(text, attrs) { attrs = attrs || {}; if (attrs.target === undefined) { diff --git a/addons/mass_mailing/security/ir.model.access.csv b/addons/mass_mailing/security/ir.model.access.csv index b8513df98bc..40a182fe6bd 100644 --- a/addons/mass_mailing/security/ir.model.access.csv +++ b/addons/mass_mailing/security/ir.model.access.csv @@ -10,3 +10,4 @@ access_mass_mailing_system,mail.mass_mailing.system,model_mail_mass_mailing,base access_mail_mail_statistics_user,mail.mail.statistics,model_mail_mail_statistics,base.group_user,1,1,1,1
access_mail_mail_statistics_mass_mailing_user,mail.mail.statistics,model_mail_mail_statistics,mass_mailing.group_mass_mailing_user,1,1,1,1
access_mail_statistics_report,mail.statistics.report,model_mail_statistics_report,mass_mailing.group_mass_mailing_user,1,1,1,1
+access_utm_source,access_utm_source,utm.model_utm_source,mass_mailing.group_mass_mailing_user,1,1,1,0
\ No newline at end of file diff --git a/addons/mrp/wizard/mrp_product_produce.py b/addons/mrp/wizard/mrp_product_produce.py index b636fc15ec7..f6a70c4a1f6 100644 --- a/addons/mrp/wizard/mrp_product_produce.py +++ b/addons/mrp/wizard/mrp_product_produce.py @@ -102,7 +102,7 @@ class MrpProductProduce(models.TransientModel): def check_finished_move_lots(self): lots = self.env['stock.move.lots'] produce_move = self.production_id.move_finished_ids.filtered(lambda x: x.product_id == self.product_id and x.state not in ('done', 'cancel')) - if produce_move.product_id.tracking != 'none': + if produce_move and produce_move.product_id.tracking != 'none': if not self.lot_id: raise UserError(_('You need to provide a lot for the finished product')) existing_move_lot = produce_move.move_lot_ids.filtered(lambda x: x.lot_id == self.lot_id) diff --git a/addons/mrp_repair/models/mrp_repair.py b/addons/mrp_repair/models/mrp_repair.py index 10c88ff7b62..cdbca9811a3 100644 --- a/addons/mrp_repair/models/mrp_repair.py +++ b/addons/mrp_repair/models/mrp_repair.py @@ -521,7 +521,7 @@ class RepairFee(models.Model): index=True, ondelete='cascade', required=True) name = fields.Char('Description', index=True, required=True) product_id = fields.Many2one('product.product', 'Product') - product_uom_qty = fields.Float('Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True) + product_uom_qty = fields.Float('Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True, default=1.0) price_unit = fields.Float('Unit Price', required=True) product_uom = fields.Many2one('product.uom', 'Product Unit of Measure', required=True) price_subtotal = fields.Float('Subtotal', compute='_compute_price_subtotal', digits=0) diff --git a/addons/payment/views/payment_views.xml b/addons/payment/views/payment_views.xml index fc0a5d458c7..ed9ad78f316 100644 --- a/addons/payment/views/payment_views.xml +++ b/addons/payment/views/payment_views.xml @@ -221,22 +221,22 @@ <field name="reference"/> <label for="amount"/> <div class="o_row"> - <field name="amount" class="oe_inline" /> - <field name="currency_id" options="{'no_open': True, 'no_create': True}" class="oe_inline" /> + <field name="amount"/> + <field name="currency_id" options="{'no_open': True, 'no_create': True}"/> </div> <field name="fees"/> <field name="partner_id"/> <label for="partner_details" string="Customer Details"/> - <div name="partner_details"> - <field name="partner_name" placeholder="Name" attrs="{'readonly': [('partner_id', '!=', False)]}"/> - <field name="partner_address" placeholder="Address" attrs="{'readonly': [('partner_id', '!=', False)]}"/> - <div class="o_row"> - <field name="partner_zip" class="oe_inline" placeholder="ZIP" attrs="{'readonly': [('partner_id', '!=', False)]}"/> - <field name="partner_city" class="oe_inline" placeholder="City" attrs="{'readonly': [('partner_id', '!=', False)]}"/> + <div> + <div name="partner_details" class="o_address_format"> + <field name="partner_name" placeholder="Name" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_street"/> + <field name="partner_address" placeholder="Address" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_street"/> + <field name="partner_city" placeholder="City" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_city"/> + <field name="partner_zip" placeholder="ZIP" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_zip"/> + <field name="partner_country_id" placeholder="Country" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_country"/> + <field name="partner_lang" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_street"/> + <field name="partner_email" placeholder="E-mail" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_street"/> </div> - <field name="partner_country_id" placeholder="Country" attrs="{'readonly': [('partner_id', '!=', False)]}"/> - <field name="partner_lang" attrs="{'readonly': [('partner_id', '!=', False)]}"/> - <field name="partner_email" placeholder="E-mail" attrs="{'readonly': [('partner_id', '!=', False)]}"/> </div> </group> <group> diff --git a/addons/pos_mercury/static/src/xml/pos_mercury.xml b/addons/pos_mercury/static/src/xml/pos_mercury.xml index 02f25588a3c..acf830e2543 100644 --- a/addons/pos_mercury/static/src/xml/pos_mercury.xml +++ b/addons/pos_mercury/static/src/xml/pos_mercury.xml @@ -25,16 +25,16 @@ </t> </t> <t t-jquery="tbody tr.paymentline.selected"> - this.removeAttr("class"); - this.attr('t-attf-class', 'paymentline selected #{line.mercury_swipe_pending ? "o_pos_mercury_swipe_pending" : ""}'); + this.removeAttr('class'); + this.attr('t-attf-class', 'paymentline selected #{line.mercury_swipe_pending ? \'o_pos_mercury_swipe_pending\' : \'\'}'); </t> <t t-jquery="tbody tr.paymentline[t-att-data-cid*='line.cid']"> - this.removeAttr("class"); - this.attr('t-attf-class', 'paymentline #{line.mercury_swipe_pending ? "o_pos_mercury_swipe_pending" : ""}'); + this.removeAttr('class'); + this.attr('t-attf-class', 'paymentline #{line.mercury_swipe_pending ? \'o_pos_mercury_swipe_pending\' : \'\'}'); </t> <t t-jquery="tbody tr td.col-tendered.edit"> - this.removeAttr("class"); - this.attr('t-attf-class', 'col-tendered edit #{line.mercury_swipe_pending ? "o_pos_mercury_swipe_pending" : ""}'); + this.removeAttr('class'); + this.attr('t-attf-class', 'col-tendered edit #{line.mercury_swipe_pending ? \'o_pos_mercury_swipe_pending\' : \'\'}'); </t> </t> diff --git a/addons/product/views/product_template_views.xml b/addons/product/views/product_template_views.xml index 9d0aaa61ee1..8de9c938532 100644 --- a/addons/product/views/product_template_views.xml +++ b/addons/product/views/product_template_views.xml @@ -81,7 +81,7 @@ <span t-if="record.default_code.value">[<field name="default_code"/>]</span> <field name="name"/> </strong> - <div t-if="record.product_variant_count.value > 1"> + <div t-if="record.product_variant_count.value > 1" groups="product.group_product_variant"> <strong> <t t-esc="record.product_variant_count.value"/> Variants </strong> diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index 36e428a7730..f9250471af0 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -602,58 +602,69 @@ class PurchaseOrderLine(models.Model): return price_unit @api.multi + def _prepare_stock_moves(self, picking): + """ Prepare the stock moves data for one order line. This function returns a list of + dictionary ready to be used in stock.move's create() + """ + self.ensure_one() + res = [] + if self.product_id.type not in ['product', 'consu']: + return res + qty = 0.0 + price_unit = self._get_stock_move_price_unit() + for move in self.move_ids.filtered(lambda x: x.state != 'cancel'): + qty += move.product_qty + template = { + 'name': self.name or '', + 'product_id': self.product_id.id, + 'product_uom': self.product_uom.id, + 'date': self.order_id.date_order, + 'date_expected': self.date_planned, + 'location_id': self.order_id.partner_id.property_stock_supplier.id, + 'location_dest_id': self.order_id._get_destination_location(), + 'picking_id': picking.id, + 'partner_id': self.order_id.dest_address_id.id, + 'move_dest_id': False, + 'state': 'draft', + 'purchase_line_id': self.id, + 'company_id': self.order_id.company_id.id, + 'price_unit': price_unit, + 'picking_type_id': self.order_id.picking_type_id.id, + 'group_id': self.order_id.group_id.id, + 'procurement_id': False, + 'origin': self.order_id.name, + 'route_ids': self.order_id.picking_type_id.warehouse_id and [(6, 0, [x.id for x in self.order_id.picking_type_id.warehouse_id.route_ids])] or [], + 'warehouse_id': self.order_id.picking_type_id.warehouse_id.id, + } + # Fullfill all related procurements with this po line + diff_quantity = self.product_qty - qty + for procurement in self.procurement_ids: + # If the procurement has some moves already, we should deduct their quantity + sum_existing_moves = sum(x.product_qty for x in procurement.move_ids if x.state != 'cancel') + existing_proc_qty = procurement.product_id.uom_id._compute_quantity(sum_existing_moves, procurement.product_uom) + procurement_qty = procurement.product_uom._compute_quantity(procurement.product_qty, self.product_uom) - existing_proc_qty + if float_compare(procurement_qty, 0.0, precision_rounding=procurement.product_uom.rounding) > 0 and float_compare(diff_quantity, 0.0, precision_rounding=self.product_uom.rounding) > 0: + tmp = template.copy() + tmp.update({ + 'product_uom_qty': min(procurement_qty, diff_quantity), + 'move_dest_id': procurement.move_dest_id.id, # move destination is same as procurement destination + 'procurement_id': procurement.id, + 'propagate': procurement.rule_id.propagate, + }) + res.append(tmp) + diff_quantity -= min(procurement_qty, diff_quantity) + if float_compare(diff_quantity, 0.0, precision_rounding=self.product_uom.rounding) > 0: + template['product_uom_qty'] = diff_quantity + res.append(template) + return res + + @api.multi def _create_stock_moves(self, picking): moves = self.env['stock.move'] done = self.env['stock.move'].browse() for line in self: - if line.product_id.type not in ['product', 'consu']: - continue - qty = 0.0 - price_unit = line._get_stock_move_price_unit() - for move in line.move_ids.filtered(lambda x: x.state != 'cancel'): - qty += move.product_qty - template = { - 'name': line.name or '', - 'product_id': line.product_id.id, - 'product_uom': line.product_uom.id, - 'date': line.order_id.date_order, - 'date_expected': line.date_planned, - 'location_id': line.order_id.partner_id.property_stock_supplier.id, - 'location_dest_id': line.order_id._get_destination_location(), - 'picking_id': picking.id, - 'partner_id': line.order_id.dest_address_id.id, - 'move_dest_id': False, - 'state': 'draft', - 'purchase_line_id': line.id, - 'company_id': line.order_id.company_id.id, - 'price_unit': price_unit, - 'picking_type_id': line.order_id.picking_type_id.id, - 'group_id': line.order_id.group_id.id, - 'procurement_id': False, - 'origin': line.order_id.name, - 'route_ids': line.order_id.picking_type_id.warehouse_id and [(6, 0, [x.id for x in line.order_id.picking_type_id.warehouse_id.route_ids])] or [], - 'warehouse_id':line.order_id.picking_type_id.warehouse_id.id, - } - # Fullfill all related procurements with this po line - diff_quantity = line.product_qty - qty - for procurement in line.procurement_ids: - # If the procurement has some moves already, we should deduct their quantity - sum_existing_moves = sum(x.product_qty for x in procurement.move_ids if x.state != 'cancel') - existing_proc_qty = procurement.product_id.uom_id._compute_quantity(sum_existing_moves, procurement.product_uom) - procurement_qty = procurement.product_uom._compute_quantity(procurement.product_qty, line.product_uom) - existing_proc_qty - if float_compare(procurement_qty, 0.0, precision_rounding=procurement.product_uom.rounding) > 0 and float_compare(diff_quantity, 0.0, precision_rounding=line.product_uom.rounding) > 0: - tmp = template.copy() - tmp.update({ - 'product_uom_qty': min(procurement_qty, diff_quantity), - 'move_dest_id': procurement.move_dest_id.id, #move destination is same as procurement destination - 'procurement_id': procurement.id, - 'propagate': procurement.rule_id.propagate, - }) - done += moves.create(tmp) - diff_quantity -= min(procurement_qty, diff_quantity) - if float_compare(diff_quantity, 0.0, precision_rounding=line.product_uom.rounding) > 0: - template['product_uom_qty'] = diff_quantity - done += moves.create(template) + for val in line._prepare_stock_moves(picking): + done += moves.create(val) return done @api.multi diff --git a/addons/purchase/views/purchase_views.xml b/addons/purchase/views/purchase_views.xml index 47122f20599..df918b60dd1 100644 --- a/addons/purchase/views/purchase_views.xml +++ b/addons/purchase/views/purchase_views.xml @@ -210,6 +210,7 @@ <page string="Products"> <field name="order_line" attrs="{'readonly': [('state', 'in', ('done', 'cancel'))]}"> <tree string="Purchase Order Lines" editable="bottom"> + <field name="currency_id" invisible="1"/> <field name="state" invisible="1"/> <field name="sequence" widget="handle"/> <field name="product_id" attrs="{'readonly': [('state', 'in', ('purchase', 'to approve','done', 'cancel'))]}" context="{'partner_id':parent.partner_id, 'quantity':product_qty,'uom':product_uom, 'company_id': parent.company_id}"/> diff --git a/addons/resource/models/resource.py b/addons/resource/models/resource.py index 582716e4801..c661b0c5151 100644 --- a/addons/resource/models/resource.py +++ b/addons/resource/models/resource.py @@ -300,34 +300,34 @@ class ResourceCalendar(models.Model): # Computes start_dt, end_dt (with default values if not set) + off-interval work limits work_limits = [] if start_dt is None and end_dt is not None: - start_dt = end_dt.replace(hour=0, minute=0, second=0) + start_dt = end_dt.replace(hour=0, minute=0, second=0, microsecond=0) elif start_dt is None: - start_dt = datetime.datetime.now().replace(hour=0, minute=0, second=0) + start_dt = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) else: - work_limits.append((start_dt.replace(hour=0, minute=0, second=0), start_dt)) + work_limits.append((start_dt.replace(hour=0, minute=0, second=0, microsecond=0), start_dt)) if end_dt is None: - end_dt = start_dt.replace(hour=23, minute=59, second=59) + end_dt = start_dt.replace(hour=23, minute=59, second=59, microsecond=999999) else: - work_limits.append((end_dt, end_dt.replace(hour=23, minute=59, second=59))) + work_limits.append((end_dt, end_dt.replace(hour=23, minute=59, second=59, microsecond=999999))) assert start_dt.date() == end_dt.date(), 'get_working_intervals_of_day is restricted to one day' intervals = [] - work_dt = start_dt.replace(hour=0, minute=0, second=0) + work_dt = start_dt.replace(hour=0, minute=0, second=0, microsecond=0) # no calendar: try to use the default_interval, then return directly if not self: working_interval = [] if default_interval: - working_interval = (start_dt.replace(hour=default_interval[0], minute=0, second=0), - start_dt.replace(hour=default_interval[1], minute=0, second=0)) + working_interval = (start_dt.replace(hour=default_interval[0], minute=0, second=0, microsecond=0), + start_dt.replace(hour=default_interval[1], minute=0, second=0, microsecond=0)) intervals = self.interval_remove_leaves(working_interval, work_limits) return intervals working_intervals = [] tz_info = fields.Datetime.context_timestamp(self, work_dt).tzinfo for calendar_working_day in self.get_attendances_for_weekday(start_dt): - dt_f = work_dt.replace(hour=0, minute=0, second=0) + timedelta(seconds=(calendar_working_day.hour_from * 3600)) - dt_t = work_dt.replace(hour=0, minute=0, second=0) + timedelta(seconds=(calendar_working_day.hour_to * 3600)) + dt_f = work_dt.replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(seconds=(calendar_working_day.hour_from * 3600)) + dt_t = work_dt.replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(seconds=(calendar_working_day.hour_to * 3600)) # adapt tz working_interval = ( @@ -369,12 +369,12 @@ class ResourceCalendar(models.Model): resource_id=None, default_interval=None): hours = 0.0 for day in rrule.rrule(rrule.DAILY, dtstart=start_dt, - until=(end_dt + timedelta(days=1)).replace(hour=0, minute=0, second=0), + until=(end_dt + timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0), byweekday=self.get_weekdays()): - day_start_dt = day.replace(hour=0, minute=0, second=0) + day_start_dt = day.replace(hour=0, minute=0, second=0, microsecond=0) if start_dt and day.date() == start_dt.date(): day_start_dt = start_dt - day_end_dt = day.replace(hour=23, minute=59, second=59) + day_end_dt = day.replace(hour=23, minute=59, second=59, microsecond=999999) if end_dt and day.date() == end_dt.date(): day_end_dt = end_dt hours += self.get_working_hours_of_date( @@ -528,7 +528,7 @@ class ResourceCalendar(models.Model): intervals = [] planned_days = 0 iterations = 0 - current_datetime = day_date.replace(hour=0, minute=0, second=0) + current_datetime = day_date.replace(hour=0, minute=0, second=0, microsecond=0) while planned_days < days and iterations < 100: working_intervals = self.get_working_intervals_of_day( @@ -585,7 +585,7 @@ class ResourceCalendar(models.Model): saas-3, counts leave hours instead of all-day leaves.""" return self.schedule_hours( hours * -1.0, - day_dt=dt_from.replace(minute=0, second=0), + day_dt=dt_from.replace(minute=0, second=0, microsecond=0), compute_leaves=True, resource_id=resource, default_interval=(8, 16) ) diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 18fdb4a44f5..5f3fef9b915 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -664,7 +664,7 @@ class SaleOrderLine(models.Model): vals = line._prepare_order_line_procurement(group_id=line.order_id.procurement_group_id.id) vals['product_qty'] = line.product_uom_qty - qty - new_proc = self.env["procurement.order"].create(vals) + new_proc = self.env["procurement.order"].with_context(procurement_autorun_defer=True).create(vals) new_proc.message_post_with_view('mail.message_origin_link', values={'self': new_proc, 'origin': line.order_id}, subtype_id=self.env.ref('mail.mt_note').id) diff --git a/addons/sale/views/sale_views.xml b/addons/sale/views/sale_views.xml index 794ed8ea5b4..1c5cc4f086d 100644 --- a/addons/sale/views/sale_views.xml +++ b/addons/sale/views/sale_views.xml @@ -290,6 +290,7 @@ <field name="state" invisible="1"/> <field name="invoice_status" invisible="1"/> <field name="customer_lead" invisible="1"/> + <field name="currency_id" invisible="1"/> </tree> <kanban class="o_kanban_mobile"> <field name="product_id"/> diff --git a/addons/sale_stock/models/sale_order.py b/addons/sale_stock/models/sale_order.py index 46a586774c2..65bbdf51a07 100644 --- a/addons/sale_stock/models/sale_order.py +++ b/addons/sale_stock/models/sale_order.py @@ -111,8 +111,9 @@ class SaleOrderLine(models.Model): def _compute_qty_delivered_updateable(self): for line in self: if line.product_id.type not in ('consu', 'product'): - return super(SaleOrderLine, self)._compute_qty_delivered_updateable() - line.qty_delivered_updateable = False + super(SaleOrderLine, line)._compute_qty_delivered_updateable() + else: + line.qty_delivered_updateable = False @api.onchange('product_id') def _onchange_product_id_set_customer_lead(self): diff --git a/addons/sale_stock/models/stock.py b/addons/sale_stock/models/stock.py index 4c05ef79156..e0e96a32213 100644 --- a/addons/sale_stock/models/stock.py +++ b/addons/sale_stock/models/stock.py @@ -65,11 +65,12 @@ class StockPicking(models.Model): res = super(StockPicking, self)._create_backorder(backorder_moves) for picking in self.filtered(lambda pick: pick.picking_type_id.code == 'outgoing'): backorder = picking.search([('backorder_id', '=', picking.id)]) - order = self.env['sale.order'].search([('procurement_group_id', '=', backorder.group_id.id)]) - backorder.message_post_with_view( - 'mail.message_origin_link', - values={'self': backorder, 'origin': order}, - subtype_id=self.env.ref('mail.mt_note').id) + if backorder.group_id: # origin from a sale + order = self.env['sale.order'].search([('procurement_group_id', '=', backorder.group_id.id)]) + backorder.message_post_with_view( + 'mail.message_origin_link', + values={'self': backorder, 'origin': order}, + subtype_id=self.env.ref('mail.mt_note').id) return res diff --git a/addons/stock/models/stock_warehouse.py b/addons/stock/models/stock_warehouse.py index e7cfb8ccf4a..8baec91e569 100644 --- a/addons/stock/models/stock_warehouse.py +++ b/addons/stock/models/stock_warehouse.py @@ -527,7 +527,7 @@ class Warehouse(models.Model): routes = self.env['stock.location.route'].search([('supplier_wh_id', '=', self.id)]) pulls = Pull.search(['&', ('route_id', 'in', routes.ids), ('location_id.usage', '=', 'transit')]) pulls.write({ - 'location_src_id': new_location, + 'location_src_id': new_location.id, 'procure_method': change_to_multiple and "make_to_order" or "make_to_stock"}) if not change_to_multiple: # If single delivery we should create the necessary MTO rules for the resupply diff --git a/addons/stock/views/stock_pack_operation_views.xml b/addons/stock/views/stock_pack_operation_views.xml index 1f79f6fd758..5b6919dab83 100644 --- a/addons/stock/views/stock_pack_operation_views.xml +++ b/addons/stock/views/stock_pack_operation_views.xml @@ -21,8 +21,8 @@ </div> </group> <group string="Locations" groups="stock.group_stock_multi_locations"> - <field name="location_id" domain="[('id', 'child_of', picking_source_location_id)]"/> - <field name="location_dest_id" domain="[('id', 'child_of', picking_destination_location_id)]"/> + <field name="location_id" domain="[('id', 'child_of', picking_source_location_id)]" options="{'no_create': True}"/> + <field name="location_dest_id" domain="[('id', 'child_of', picking_destination_location_id)]" options="{'no_create': True}"/> </group> <group string="Packages" groups="stock.group_tracking_lot"> <field name="package_id" attrs="{'required': [('product_id', '=', False)]}" domain="[('location_id', '=', location_id)]" context="{'default_location_id': location_id}"/> diff --git a/addons/stock_calendar/models/stock.py b/addons/stock_calendar/models/stock.py index 01768f43d0d..9ed605cda30 100644 --- a/addons/stock_calendar/models/stock.py +++ b/addons/stock_calendar/models/stock.py @@ -34,7 +34,6 @@ class StockWarehouseOrderpoint(models.Model): """ # TDE FIXME: unused context key 'no_round_hours' removed # Check if orderpoint has last execution date and calculate if we need to calculate again already - Calendar = self.env["resource.calendar"] Attendance = self.env["resource.calendar.attendance"] group = False date = False @@ -46,7 +45,7 @@ class StockWarehouseOrderpoint(models.Model): else: new_date = datetime.utcnow() # TDE note: I bet accessing interval[2] will crash, no ? this code seems very louche - intervals = Calendar._schedule_days(self.purchase_calendar_id.id, 1, new_date, compute_leaves=True) + intervals = self.purchase_calendar_id._schedule_days(1, new_date, compute_leaves=True) for interval in intervals: # If last execution date, interval should start after it in order not to execute the same orderpoint twice # TODO: Make the interval a little bigger diff --git a/addons/web/static/lib/qweb/qweb2.js b/addons/web/static/lib/qweb/qweb2.js index 1ea73e6278e..1e854a6960c 100644 --- a/addons/web/static/lib/qweb/qweb2.js +++ b/addons/web/static/lib/qweb/qweb2.js @@ -327,7 +327,8 @@ QWeb2.Engine = (function() { if (self.tools.trim(text_node.nodeValue)) { return self.tools.exception("Error: text is not allowed between branching directives"); } - text_node.remove(); + // IE <= 11.0 doesn't support ChildNode.remove + text_node.parentNode.removeChild(text_node); } } else { return self.tools.exception("Error: t-elif and t-else directives must be preceded by a t-if or t-elif directive"); diff --git a/addons/web/static/src/js/views/form_view.js b/addons/web/static/src/js/views/form_view.js index 5e956a45b19..b1638436742 100644 --- a/addons/web/static/src/js/views/form_view.js +++ b/addons/web/static/src/js/views/form_view.js @@ -639,11 +639,11 @@ var FormView = View.extend(common.FieldManagerMixin, { } }, disable_button: function () { - this.$('.oe_form_buttons').add(this.$buttons).find('button').addClass('o_disabled').prop('disabled', true); + this.$('.oe_form_buttons,.o_statusbar_buttons').add(this.$buttons).find('button').addClass('o_disabled').prop('disabled', true); this.is_disabled = true; }, enable_button: function () { - this.$('.oe_form_buttons').add(this.$buttons).find('button.o_disabled').removeClass('o_disabled').prop('disabled', false); + this.$('.oe_form_buttons,.o_statusbar_buttons').add(this.$buttons).find('button.o_disabled').removeClass('o_disabled').prop('disabled', false); this.is_disabled = false; }, on_button_save: function() { @@ -657,8 +657,10 @@ var FormView = View.extend(common.FieldManagerMixin, { return self.reload().then(function() { self.to_view_mode(); core.bus.trigger('form_view_saved', self); + }).always(function() { + self.enable_button(); }); - }).always(function(){ + }).fail(function(){ self.enable_button(); }); }, diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js index 5018ca4660b..73dcd659429 100644 --- a/addons/web/static/src/js/views/form_widgets.js +++ b/addons/web/static/src/js/views/form_widgets.js @@ -202,7 +202,7 @@ var KanbanSelection = common.AbstractField.extend({ prepare_dropdown_selection: function() { var self = this; var _data = []; - var current_stage_id = self.view.datarecord.stage_id[0]; + var current_stage_id = self.view.datarecord.stage_id && self.view.datarecord.stage_id[0]; var stage_data = { id: current_stage_id, legend_normal: self.view.datarecord.legend_normal || undefined, diff --git a/addons/web/static/src/js/views/list_view_editable.js b/addons/web/static/src/js/views/list_view_editable.js index 003b6f18d01..c3b2209c477 100644 --- a/addons/web/static/src/js/views/list_view_editable.js +++ b/addons/web/static/src/js/views/list_view_editable.js @@ -641,6 +641,9 @@ ListView.include(/** @lends instance.web.ListView# */{ if (saveInfo.created) { return self.start_edition(); } + if (!options) { + options = {}; + } options.wraparound = !self.is_action_enabled('create'); var record = self.records[next_record](saveInfo.record, options); if (record === undefined) { diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 65cc369005c..c434ca32ed7 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -168,7 +168,7 @@ class Website(Home): sitemaps.unlink() pages = 0 - locs = request.website.sudo(user=request.website.user_id.id).enumerate_pages() + locs = request.website.with_context(use_public_user=True).enumerate_pages() while True: values = { 'locs': islice(locs, 0, LOC_PER_SITEMAP), diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index be90d31c341..a1d19f016b4 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -196,9 +196,9 @@ class Http(models.AbstractModel): if request.lang != request.website.default_lang_code: path.insert(1, request.lang) path = '/'.join(path) or '/' + request.context = context redirect = request.redirect(path + '?' + request.httprequest.query_string) redirect.set_cookie('website_lang', request.lang) - request.context = context return redirect elif url_lang: request.uid = None @@ -363,6 +363,8 @@ class ModelConverter(ir.ir_http.ModelConverter): def generate(self, query=None, args=None): Model = request.env[self.model] + if request.context.get('use_public_user'): + Model = Model.sudo(request.website.user_id.id) domain = safe_eval(self.domain, (args or {}).copy()) if query: domain.append((Model._rec_name, 'ilike', '%' + query + '%')) diff --git a/addons/website_event_track/controllers/main.py b/addons/website_event_track/controllers/main.py index 544c749c635..a1bd858ffdd 100644 --- a/addons/website_event_track/controllers/main.py +++ b/addons/website_event_track/controllers/main.py @@ -50,7 +50,7 @@ class WebsiteEventTrackController(http.Controller): for loc in locations.keys(): if locations[loc] and (locations[loc][-1][2] > start_date): locations[loc][-1][3] += 1 - elif not locations[loc] or locations[loc][-1][2] < start_date: + elif not locations[loc] or locations[loc][-1][2] <= start_date: locations[loc].append([False, locations[loc] and locations[loc][-1][2] or dates[0][0], start_date, 1]) dates[-1][1][loc] = locations[loc][-1] forcetr = not bool(location) |
