summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-04-13 13:22:27 +0200
committerChristophe Simonis <chs@odoo.com>2017-04-13 13:22:27 +0200
commit13ad16104afa58fd7d3d70f502ada972727084eb (patch)
tree85cf1db6e9bd45960cc76e2b04122c460d945337 /addons
parentbb5e0a3cfa08845dc935b1bc4881807f56e116c8 (diff)
parent00e169c05a270a0943a74fbeb0a884009946c7cd (diff)
[MERGE] forward port branch 10.0 up to 00e169c05a2
Diffstat (limited to 'addons')
-rw-r--r--addons/account/models/account_invoice.py10
-rw-r--r--addons/account/models/account_journal_dashboard.py6
-rw-r--r--addons/account/models/account_move.py11
-rw-r--r--addons/account/report/account_partner_ledger.py2
-rw-r--r--addons/account/static/src/xml/account_reconciliation.xml8
-rw-r--r--addons/account/views/account_view.xml2
-rw-r--r--addons/account/views/report_invoice.xml7
-rw-r--r--addons/account/views/report_partnerledger.xml8
-rw-r--r--addons/account/wizard/account_invoice_refund.py1
-rw-r--r--addons/account_asset/models/account_asset.py7
-rw-r--r--addons/calendar/static/src/js/base_calendar.js3
-rw-r--r--addons/event/models/event.py2
-rw-r--r--addons/event/models/event_mail.py2
-rw-r--r--addons/event/views/event_views.xml4
-rw-r--r--addons/fleet/models/fleet.py10
-rw-r--r--addons/hr_expense/models/hr_expense.py53
-rw-r--r--addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py2
-rw-r--r--addons/l10n_at/data/l10n_at_chart_data.xml2
-rw-r--r--addons/l10n_in_schedule6/__init__.py2
-rw-r--r--addons/l10n_in_schedule6/__openerp__.py31
-rw-r--r--addons/l10n_in_schedule6/account_chart_template.yml3
-rw-r--r--addons/l10n_in_schedule6/l10n_in_schedule6_chart.xml1433
-rw-r--r--addons/l10n_in_schedule6/l10n_in_schedule6_tax_template.xml842
-rw-r--r--addons/l10n_in_schedule6/static/description/icon.pngbin0 -> 2519 bytes
-rw-r--r--addons/mail/models/mail_thread.py23
-rw-r--r--addons/maintenance/views/maintenance_views.xml2
-rw-r--r--addons/mass_mailing/models/mail_mail.py3
-rw-r--r--addons/mrp/models/product.py7
-rw-r--r--addons/mrp/models/stock_move.py2
-rw-r--r--addons/mrp_repair/models/mrp_repair.py5
-rw-r--r--addons/mrp_repair/report/mrp_repair_reports.xml2
-rw-r--r--addons/mrp_repair/report/mrp_repair_templates_repair_order.xml9
-rw-r--r--addons/payment_authorize/models/authorize_request.py2
-rw-r--r--addons/payment_paypal/controllers/main.py14
-rw-r--r--addons/point_of_sale/controllers/main.py5
-rw-r--r--addons/point_of_sale/models/pos_config.py16
-rw-r--r--addons/point_of_sale/models/pos_order.py42
-rw-r--r--addons/point_of_sale/models/pos_session.py12
-rw-r--r--addons/point_of_sale/static/src/js/chrome.js3
-rw-r--r--addons/point_of_sale/static/src/js/models.js4
-rw-r--r--addons/point_of_sale/static/src/js/screens.js15
-rw-r--r--addons/point_of_sale/tests/common.py4
-rw-r--r--addons/point_of_sale/tests/test_point_of_sale_flow.py139
-rw-r--r--addons/point_of_sale/views/pos_session_view.xml2
-rw-r--r--addons/purchase/models/purchase.py33
-rw-r--r--addons/report/models/report.py7
-rw-r--r--addons/sale/models/account_invoice.py4
-rw-r--r--addons/sale/models/sale.py45
-rw-r--r--addons/sale/models/sale_analytic.py14
-rw-r--r--addons/sale_timesheet/models/sale_order.py15
-rw-r--r--addons/sales_team/data/sales_team_data.xml2
-rw-r--r--addons/sales_team/models/crm_team.py8
-rw-r--r--addons/stock/models/procurement.py32
-rw-r--r--addons/stock/models/stock_move.py22
-rw-r--r--addons/stock/report/report_deliveryslip.xml3
-rw-r--r--addons/stock/tests/test_stock_flow.py67
-rw-r--r--addons/stock/views/stock_warehouse_views.xml1
-rw-r--r--addons/stock_account/models/stock.py2
-rw-r--r--addons/stock_landed_costs/models/stock_landed_cost.py4
-rw-r--r--addons/web/controllers/main.py4
-rw-r--r--addons/web/static/src/js/widgets/data_export.js12
-rw-r--r--addons/web/static/src/less/data_export.less14
-rw-r--r--addons/web/views/database_manager.html6
-rw-r--r--addons/web_editor/static/src/js/rte.summernote.js10
-rw-r--r--addons/web_editor/static/src/js/widgets.js12
-rw-r--r--addons/web_kanban/static/src/js/kanban_view.js3
-rw-r--r--addons/web_tour/static/src/js/tour_manager.js3
-rw-r--r--addons/website/static/src/js/website.contentMenu.js1
-rw-r--r--addons/website_quote/models/sale_order.py8
-rw-r--r--addons/website_sale/models/sale_order.py13
-rw-r--r--addons/website_sale/static/src/css/website_sale.css4
-rw-r--r--addons/website_sale/static/src/css/website_sale.sass3
-rw-r--r--addons/website_sale/static/src/js/website_sale.js12
-rw-r--r--addons/website_sale/views/templates.xml4
-rw-r--r--addons/website_sale_options/views/website_sale_options_templates.xml4
75 files changed, 2952 insertions, 182 deletions
diff --git a/addons/account/models/account_invoice.py b/addons/account/models/account_invoice.py
index fadd4a6028c..feaba47626b 100644
--- a/addons/account/models/account_invoice.py
+++ b/addons/account/models/account_invoice.py
@@ -483,9 +483,9 @@ class AccountInvoice(models.Model):
else:
account_id = pay_account.id
payment_term_id = p.property_supplier_payment_term_id.id
- addr = self.partner_id.address_get(['delivery'])
- fiscal_position = self.env['account.fiscal.position'].get_fiscal_position(self.partner_id.id, delivery_id=addr['delivery'])
+ delivery_partner_id = self.get_delivery_partner_id()
+ fiscal_position = self.env['account.fiscal.position'].get_fiscal_position(self.partner_id.id, delivery_id=delivery_partner_id)
# If partner has no warning, check its company
if p.invoice_warn == 'no-message' and p.parent_id:
@@ -513,6 +513,10 @@ class AccountInvoice(models.Model):
return {'domain': {'partner_bank_id': [('id', 'in', bank_ids.ids)]}}
return {}
+ @api.multi
+ def get_delivery_partner_id(self):
+ self.ensure_one()
+ return self.partner_id.address_get(['delivery'])['delivery']
@api.onchange('journal_id')
def _onchange_journal_id(self):
@@ -1030,7 +1034,7 @@ class AccountInvoice(models.Model):
values['invoice_line_ids'] = self._refund_cleanup_lines(invoice.invoice_line_ids)
- tax_lines = filter(lambda l: l.manual, invoice.tax_line_ids)
+ tax_lines = invoice.tax_line_ids
values['tax_line_ids'] = self._refund_cleanup_lines(tax_lines)
if journal_id:
diff --git a/addons/account/models/account_journal_dashboard.py b/addons/account/models/account_journal_dashboard.py
index e0df2075a29..62a760aa017 100644
--- a/addons/account/models/account_journal_dashboard.py
+++ b/addons/account/models/account_journal_dashboard.py
@@ -304,11 +304,13 @@ class account_journal(models.Model):
'default_type': invoice_type,
'type': invoice_type
})
+
[action] = self.env.ref('account.%s' % action_name).read()
action['context'] = ctx
action['domain'] = self._context.get('use_domain', [])
- action['views'] = False
- action['view_id'] = False
+ if action_name in ['action_bank_statement_tree', 'action_view_bank_statement_tree']:
+ action['views'] = False
+ action['view_id'] = False
return action
@api.multi
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index d922e3b7410..c7bf678a2d8 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -8,6 +8,7 @@ from odoo.exceptions import RedirectWarning, UserError, ValidationError
from odoo.tools.misc import formatLang
from odoo.tools import float_is_zero, float_compare
from odoo.tools.safe_eval import safe_eval
+import odoo.addons.decimal_precision as dp
from lxml import etree
#----------------------------------------------------------
@@ -370,7 +371,7 @@ class AccountMoveLine(models.Model):
self.counterpart = ",".join(counterpart)
name = fields.Char(required=True, string="Label")
- quantity = fields.Float(digits=(16, 2),
+ quantity = fields.Float(digits=dp.get_precision('Product Unit of Measure'),
help="The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.")
product_uom_id = fields.Many2one('product.uom', string='Unit of Measure')
product_id = fields.Many2one('product.product', string='Product')
@@ -763,7 +764,7 @@ class AccountMoveLine(models.Model):
"""
for datum in data:
if len(datum['mv_line_ids']) >= 1 or len(datum['mv_line_ids']) + len(datum['new_mv_line_dicts']) >= 2:
- self.process_reconciliation(datum['mv_line_ids'], datum['new_mv_line_dicts'])
+ self.env['account.move.line'].browse(datum['mv_line_ids']).process_reconciliation(datum['new_mv_line_dicts'])
if datum['type'] == 'partner':
partners = self.env['res.partner'].browse(datum['id'])
@@ -1426,9 +1427,9 @@ class AccountPartialReconcile(models.Model):
for rec in self:
if not rec.company_id.currency_exchange_journal_id:
raise UserError(_("You should configure the 'Exchange Rate Journal' in the accounting settings, to manage automatically the booking of accounting entries related to differences between exchange rates."))
- if not self.company_id.income_currency_exchange_account_id.id:
+ if not rec.company_id.income_currency_exchange_account_id.id:
raise UserError(_("You should configure the 'Gain Exchange Rate Account' in the accounting settings, to manage automatically the booking of accounting entries related to differences between exchange rates."))
- if not self.company_id.expense_currency_exchange_account_id.id:
+ if not rec.company_id.expense_currency_exchange_account_id.id:
raise UserError(_("You should configure the 'Loss Exchange Rate Account' in the accounting settings, to manage automatically the booking of accounting entries related to differences between exchange rates."))
move_vals = {'journal_id': rec.company_id.currency_exchange_journal_id.id}
@@ -1488,6 +1489,8 @@ class AccountPartialReconcile(models.Model):
#amount is the current cash_basis amount minus the one before the reconciliation
amount = line.balance * percentage_after - line.balance * percentage_before
rounded_amt = line.company_id.currency_id.round(amount)
+ if float_is_zero(rounded_amt, precision_rounding=line.company_id.currency_id.rounding):
+ continue
if line.tax_line_id and line.tax_line_id.use_cash_basis:
if not newly_created_move:
newly_created_move = self._create_tax_basis_move()
diff --git a/addons/account/report/account_partner_ledger.py b/addons/account/report/account_partner_ledger.py
index c01d22cac04..ba2503d41a9 100644
--- a/addons/account/report/account_partner_ledger.py
+++ b/addons/account/report/account_partner_ledger.py
@@ -11,6 +11,7 @@ class ReportPartnerLedger(models.AbstractModel):
def _lines(self, data, partner):
full_account = []
+ currency = self.env['res.currency']
query_get_data = self.env['account.move.line'].with_context(data['form'].get('used_context', {}))._query_get()
reconcile_clause = "" if data['form']['reconciled'] else ' AND "account_move_line".reconciled = false '
params = [partner.id, tuple(data['computed']['move_state']), tuple(data['computed']['account_ids'])] + query_get_data[2]
@@ -40,6 +41,7 @@ class ReportPartnerLedger(models.AbstractModel):
)
sum += r['debit'] - r['credit']
r['progress'] = sum
+ r['currency_id'] = currency.browse(r.get('currency_id'))
full_account.append(r)
return full_account
diff --git a/addons/account/static/src/xml/account_reconciliation.xml b/addons/account/static/src/xml/account_reconciliation.xml
index f6b11825a1e..fafcb833205 100644
--- a/addons/account/static/src/xml/account_reconciliation.xml
+++ b/addons/account/static/src/xml/account_reconciliation.xml
@@ -301,10 +301,10 @@
<td class="oe_form_group_cell o_form_group_cell" colspan="1" width="99%">
<span class="oe_form_field o_form_field oe_form_field_radio o_form_field_radio oe_vertical o_vertical oe_form_required o_form_required">
<span>
- <t t-if="display_mode_customers" t-call="show_mode_selector_option"><t t-set="value">customers</t><t t-set="title">Customers</t></t>
- <t t-if="display_mode_suppliers" t-call="show_mode_selector_option"><t t-set="value">suppliers</t><t t-set="title">Vendors</t></t>
- <t t-if="display_mode_others" t-call="show_mode_selector_option"><t t-set="value">others</t><t t-set="title">OtherAccounts</t></t>
- <t t-call="show_mode_selector_option"><t t-set="value">all</t><t t-set="title">All</t></t>
+ <t t-if="display_mode_customers" t-call="show_mode_selector_option"><t t-set="value" t-value="'customers'"/><t t-set="title">Customers</t></t>
+ <t t-if="display_mode_suppliers" t-call="show_mode_selector_option"><t t-set="value" t-value="'suppliers'"/><t t-set="title">Vendors</t></t>
+ <t t-if="display_mode_others" t-call="show_mode_selector_option"><t t-set="value" t-value="'others'"/><t t-set="title">OtherAccounts</t></t>
+ <t t-call="show_mode_selector_option"><t t-set="value" t-value="'all'"/><t t-set="title">All</t></t>
</span>
</span>
</td>
diff --git a/addons/account/views/account_view.xml b/addons/account/views/account_view.xml
index 0a0ec39363d..1b1ec7e2799 100644
--- a/addons/account/views/account_view.xml
+++ b/addons/account/views/account_view.xml
@@ -638,7 +638,7 @@
<field name="act_window_id" ref="action_bank_statement_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_bank_statement_form_bank">
- <field name="sequence" eval="1"/>
+ <field name="sequence" eval="2"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_bank_statement_form"/>
<field name="act_window_id" ref="action_bank_statement_tree"/>
diff --git a/addons/account/views/report_invoice.xml b/addons/account/views/report_invoice.xml
index 9809cf93e54..72e71cde309 100644
--- a/addons/account/views/report_invoice.xml
+++ b/addons/account/views/report_invoice.xml
@@ -126,12 +126,14 @@
</table>
</div>
</div>
- <div class="row" t-if="len(o.tax_line_ids) > 1">
+ <!-- DO NOT REMOVE THIS TABLE. MANDATORY IN SOME COUNTRIES -->
+ <div class="row" t-if="len(o.tax_line_ids) > 0">
<div class="col-xs-6">
<table class="table table-condensed">
<thead>
<tr>
<th>Tax</th>
+ <th class="text-right">Base</th>
<th class="text-right">Amount</th>
</tr>
</thead>
@@ -139,6 +141,9 @@
<tr t-foreach="o.tax_line_ids" t-as="t">
<td><span t-field="t.tax_id.description"/></td>
<td class="text-right">
+ <span t-field="t.base" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
+ </td>
+ <td class="text-right">
<span t-field="t.amount" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
diff --git a/addons/account/views/report_partnerledger.xml b/addons/account/views/report_partnerledger.xml
index 0259e5167e8..5294736086c 100644
--- a/addons/account/views/report_partnerledger.xml
+++ b/addons/account/views/report_partnerledger.xml
@@ -36,7 +36,7 @@
<th>Debit</th>
<th>Credit</th>
<th>Balance</th>
- <th t-if="amount_currency">Currency</th>
+ <th t-if="data['form']['amount_currency']">Currency</th>
</tr>
</thead>
<tbody>
@@ -77,8 +77,10 @@
<td class="text-right">
<span t-esc="line['progress']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
- <td t-if="amount_currency">
- <span t-esc="line['amount_currency']" t-options="{'widget': 'monetary', 'display_currency': line['currency_id']}"/>
+ <td class="text-right" t-if="data['form']['amount_currency']">
+ <t t-if="line['currency_id']">
+ <span t-esc="line['amount_currency']" t-options="{'widget': 'monetary', 'display_currency': line['currency_id']}"/>
+ </t>
</td>
</tr>
</tbody>
diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py
index c0c2a0a14f5..bb30c799611 100644
--- a/addons/account/wizard/account_invoice_refund.py
+++ b/addons/account/wizard/account_invoice_refund.py
@@ -58,7 +58,6 @@ class AccountInvoiceRefund(models.TransientModel):
date = form.date or False
description = form.description or inv.name
refund = inv.refund(form.date_invoice, date, description, inv.journal_id.id)
- refund.compute_taxes()
created_inv.append(refund.id)
if mode in ('cancel', 'modify'):
diff --git a/addons/account_asset/models/account_asset.py b/addons/account_asset/models/account_asset.py
index 6f1251ccaca..83639b5f3a5 100644
--- a/addons/account_asset/models/account_asset.py
+++ b/addons/account_asset/models/account_asset.py
@@ -471,15 +471,14 @@ class AccountAssetDepreciationLine(models.Model):
@api.multi
def create_move(self, post_move=True):
created_moves = self.env['account.move']
+ prec = self.env['decimal.precision'].precision_get('Account')
for line in self:
category_id = line.asset_id.category_id
depreciation_date = self.env.context.get('depreciation_date') or line.depreciation_date or fields.Date.context_today(self)
company_currency = line.asset_id.company_id.currency_id
current_currency = line.asset_id.currency_id
amount = current_currency.compute(line.amount, company_currency)
- sign = (category_id.journal_id.type == 'purchase' or category_id.journal_id.type == 'sale' and 1) or -1
asset_name = line.asset_id.name + ' (%s/%s)' % (line.sequence, len(line.asset_id.depreciation_line_ids))
- prec = self.env['decimal.precision'].precision_get('Account')
move_line_1 = {
'name': asset_name,
'account_id': category_id.account_depreciation_id.id,
@@ -489,7 +488,7 @@ class AccountAssetDepreciationLine(models.Model):
'partner_id': line.asset_id.partner_id.id,
'analytic_account_id': category_id.account_analytic_id.id if category_id.type == 'sale' else False,
'currency_id': company_currency != current_currency and current_currency.id or False,
- 'amount_currency': company_currency != current_currency and - sign * line.amount or 0.0,
+ 'amount_currency': company_currency != current_currency and - 1.0 * line.amount or 0.0,
}
move_line_2 = {
'name': asset_name,
@@ -500,7 +499,7 @@ class AccountAssetDepreciationLine(models.Model):
'partner_id': line.asset_id.partner_id.id,
'analytic_account_id': category_id.account_analytic_id.id if category_id.type == 'purchase' else False,
'currency_id': company_currency != current_currency and current_currency.id or False,
- 'amount_currency': company_currency != current_currency and sign * line.amount or 0.0,
+ 'amount_currency': company_currency != current_currency and line.amount or 0.0,
}
move_vals = {
'ref': line.asset_id.code,
diff --git a/addons/calendar/static/src/js/base_calendar.js b/addons/calendar/static/src/js/base_calendar.js
index da443656d12..e73f009b5d6 100644
--- a/addons/calendar/static/src/js/base_calendar.js
+++ b/addons/calendar/static/src/js/base_calendar.js
@@ -61,6 +61,9 @@ widgets.SidebarFilter.include({
},
initialize_m2o: function() {
this.dfm = new form_common.DefaultFieldManager(this);
+ if (!this.view.useContacts) {
+ return;
+ }
this.dfm.extend_field_desc({
partner_id: {
relation: "res.partner",
diff --git a/addons/event/models/event.py b/addons/event/models/event.py
index d6892e927af..03aa47bbb27 100644
--- a/addons/event/models/event.py
+++ b/addons/event/models/event.py
@@ -70,7 +70,7 @@ class EventEvent(models.Model):
'interval_unit': 'days',
'interval_type': 'before_event',
'template_id': self.env.ref('event.event_reminder')
- })]
+ })] if self.user_has_groups('event.group_email_scheduling') else []
# Seats and computation
seats_max = fields.Integer(
diff --git a/addons/event/models/event_mail.py b/addons/event/models/event_mail.py
index 6a5edd12854..70d0a728fd4 100644
--- a/addons/event/models/event_mail.py
+++ b/addons/event/models/event_mail.py
@@ -49,7 +49,7 @@ class EventMailScheduler(models.Model):
if self.interval_type in ['before_event', 'after_event']:
self.done = self.mail_sent
else:
- self.done = len(self.mail_registration_ids) == len(self.event_id.registration_ids) and all(filter(lambda line: line.mail_sent, self.mail_registration_ids))
+ self.done = len(self.mail_registration_ids) == len(self.event_id.registration_ids) and all(line.mail_sent for line in self.mail_registration_ids)
@api.one
@api.depends('event_id.state', 'event_id.date_begin', 'interval_type', 'interval_unit', 'interval_nbr')
diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml
index 70a9f8049e6..b4a66363ada 100644
--- a/addons/event/views/event_views.xml
+++ b/addons/event/views/event_views.xml
@@ -434,8 +434,8 @@
<field name="interval_type"/>
<field name="scheduled_date"/>
</group>
- <notebook>
- <page string="Registration Mails">
+ <notebook groups="base.group_no_one">
+ <page string="Registration Mails" >
<field name="mail_registration_ids">
<tree string="Registration mail" editable="bottom">
<field name="registration_id"/>
diff --git a/addons/fleet/models/fleet.py b/addons/fleet/models/fleet.py
index 7ff6f95dc5d..364b44fff16 100644
--- a/addons/fleet/models/fleet.py
+++ b/addons/fleet/models/fleet.py
@@ -213,11 +213,11 @@ class FleetVehicle(models.Model):
LogContract = self.env['fleet.vehicle.log.contract']
Cost = self.env['fleet.vehicle.cost']
for record in self:
- record.odometer_count = Odometer.search_count([('vehicle_id', '=', self.id)])
- record.fuel_logs_count = LogFuel.search_count([('vehicle_id', '=', self.id)])
- record.service_count = LogService.search_count([('vehicle_id', '=', self.id)])
- record.contract_count = LogContract.search_count([('vehicle_id', '=', self.id)])
- record.cost_count = Cost.search_count([('vehicle_id', '=', self.id), ('parent_id', '=', False)])
+ record.odometer_count = Odometer.search_count([('vehicle_id', '=', record.id)])
+ record.fuel_logs_count = LogFuel.search_count([('vehicle_id', '=', record.id)])
+ record.service_count = LogService.search_count([('vehicle_id', '=', record.id)])
+ record.contract_count = LogContract.search_count([('vehicle_id', '=', record.id)])
+ record.cost_count = Cost.search_count([('vehicle_id', '=', record.id), ('parent_id', '=', False)])
@api.depends('log_contracts')
def _compute_contract_reminder(self):
diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py
index 95d4ad23324..8232084123b 100644
--- a/addons/hr_expense/models/hr_expense.py
+++ b/addons/hr_expense/models/hr_expense.py
@@ -247,32 +247,39 @@ class HrExpense(models.Model):
return True
@api.multi
+ def _prepare_move_line_value(self):
+ self.ensure_one()
+ if self.account_id:
+ account = self.account_id
+ elif self.product_id:
+ account = self.product_id.product_tmpl_id._get_product_accounts()['expense']
+ if not account:
+ raise UserError(
+ _("No Expense account found for the product %s (or for its category), please configure one.") % (self.product_id.name))
+ else:
+ account = self.env['ir.property'].with_context(force_company=self.company_id.id).get('property_account_expense_categ_id', 'product.category')
+ if not account:
+ raise UserError(
+ _('Please configure Default Expense account for Product expense: `property_account_expense_categ_id`.'))
+ aml_name = self.employee_id.name + ': ' + self.name.split('\n')[0][:64]
+ move_line = {
+ 'type': 'src',
+ 'name': aml_name,
+ 'price_unit': self.unit_amount,
+ 'quantity': self.quantity,
+ 'price': self.total_amount,
+ 'account_id': account.id,
+ 'product_id': self.product_id.id,
+ 'uom_id': self.product_uom_id.id,
+ 'analytic_account_id': self.analytic_account_id.id,
+ }
+ return move_line
+
+ @api.multi
def _move_line_get(self):
account_move = []
for expense in self:
- if expense.account_id:
- account = expense.account_id
- elif expense.product_id:
- account = expense.product_id.product_tmpl_id._get_product_accounts()['expense']
- if not account:
- raise UserError(_("No Expense account found for the product %s (or for its category), please configure one.") % (expense.product_id.name))
- else:
- account = self.env['ir.property'].with_context(force_company=expense.company_id.id).get('property_account_expense_categ_id', 'product.category')
- if not account:
- raise UserError(_('Please configure Default Expense account for Product expense: `property_account_expense_categ_id`.'))
-
- aml_name = expense.employee_id.name + ': ' + expense.name.split('\n')[0][:64]
- move_line = {
- 'type': 'src',
- 'name': aml_name,
- 'price_unit': expense.unit_amount,
- 'quantity': expense.quantity,
- 'price': expense.total_amount,
- 'account_id': account.id,
- 'product_id': expense.product_id.id,
- 'uom_id': expense.product_uom_id.id,
- 'analytic_account_id': expense.analytic_account_id.id,
- }
+ move_line = expense._prepare_move_line_value()
account_move.append(move_line)
# Calculate tax lines and adjust base line
diff --git a/addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py b/addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py
index edb11786749..49adf3fed7f 100644
--- a/addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_attendance/models/hr_timesheet_sheet.py
@@ -10,7 +10,7 @@ class HrTimesheetSheet(models.Model):
_inherit = "hr_timesheet_sheet.sheet"
attendances_ids = fields.One2many('hr.attendance', 'sheet_id', 'Attendances')
- total_attendance = fields.Integer(string='Total Attendance', compute='_compute_total')
+ total_attendance = fields.Float(string='Total Attendance', compute='_compute_total')
total_timesheet = fields.Float(string='Total Timesheet', compute="_compute_total")
total_difference = fields.Float(string='Difference', compute="_compute_total")
period_ids = fields.One2many('hr_timesheet_sheet.sheet.day', 'sheet_id', string='Period', readonly=True)
diff --git a/addons/l10n_at/data/l10n_at_chart_data.xml b/addons/l10n_at/data/l10n_at_chart_data.xml
index 8bc33d795cf..b280c11c0e3 100644
--- a/addons/l10n_at/data/l10n_at_chart_data.xml
+++ b/addons/l10n_at/data/l10n_at_chart_data.xml
@@ -779,7 +779,7 @@
<record id="chart2500" model="account.account.template">
<field name="code">2500</field>
<field name="reconcile" eval="True"/>
- <field name="user_type_id" ref="account.data_account_type_receivable"/>
+ <field name="user_type_id" ref="account.data_account_type_non_current_assets"/>
<field name="name">Vorsteuer</field>
<field name="chart_template_id" ref="austria_chart_template"/>
</record>
diff --git a/addons/l10n_in_schedule6/__init__.py b/addons/l10n_in_schedule6/__init__.py
new file mode 100644
index 00000000000..67dee8c60db
--- /dev/null
+++ b/addons/l10n_in_schedule6/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
diff --git a/addons/l10n_in_schedule6/__openerp__.py b/addons/l10n_in_schedule6/__openerp__.py
new file mode 100644
index 00000000000..20b803525d1
--- /dev/null
+++ b/addons/l10n_in_schedule6/__openerp__.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+ 'name': 'Indian - Schedule VI Accounting',
+ 'version': '2.0',
+ 'description': """
+Indian Accounting: Chart of Account.
+====================================
+
+Indian accounting chart and localization.
+
+Schedule VI chart of account for indian accounting.
+
+Note: The Schedule VI has been revised by MCA and is applicable for all Balance Sheet made after
+31st March, 2011. The Format has done away with earlier two options of format of Balance
+Sheet, now only Vertical format has been permitted Which is Supported By OpenERP.
+ """,
+ 'category': 'Localization',
+ 'depends': [
+ 'account',
+ ],
+ 'demo': [],
+ 'data': [
+ 'l10n_in_schedule6_chart.xml',
+ 'l10n_in_schedule6_tax_template.xml',
+ 'account_chart_template.yml',
+ ],
+ 'auto_install': False,
+ 'installable': True,
+}
diff --git a/addons/l10n_in_schedule6/account_chart_template.yml b/addons/l10n_in_schedule6/account_chart_template.yml
new file mode 100644
index 00000000000..e536be4873d
--- /dev/null
+++ b/addons/l10n_in_schedule6/account_chart_template.yml
@@ -0,0 +1,3 @@
+-
+ !python {model: account.chart.template, id: indian_chart_template_schedule6}: |
+ self[0].try_loading_for_current_company()
diff --git a/addons/l10n_in_schedule6/l10n_in_schedule6_chart.xml b/addons/l10n_in_schedule6/l10n_in_schedule6_chart.xml
new file mode 100644
index 00000000000..5552803bd7a
--- /dev/null
+++ b/addons/l10n_in_schedule6/l10n_in_schedule6_chart.xml
@@ -0,0 +1,1433 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+ <!-- India - Standard Accounting Chart -->
+ <record id="standard_transfer_account_id" model="account.account.template">
+ <field name="code">1206</field>
+ <field name="name">Transfer Account</field>
+ <field name="reconcile" eval='True'/>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ </record>
+ <record id="indian_chart_template_schedule6" model="account.chart.template">
+ <field name="name">Indian Chart of Accounts - Schedule VI</field>
+ <field name="bank_account_code_prefix">12142</field>
+ <field name="cash_account_code_prefix">12141</field>
+ <field name="code_digits">6</field>
+ <field name="currency_id" ref="base.INR"/>
+ <field name="transfer_account_id" ref="standard_transfer_account_id"/>
+ </record>
+ <record id="standard_transfer_account_id" model="account.account.template">
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+
+ <!-- Liabilities -->
+ <!-- Shareholder's Funds -->
+ <record model="account.account.template" id="c11101">
+ <field name="name">Authorised Share Capital</field>
+ <field name="code">11101</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11102">
+ <field name="name">Issued, Subscribed And Paid Up Capital</field>
+ <field name="code">11102</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11110">
+ <field name="name">Capital Reserve</field>
+ <field name="code">11110</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11111">
+ <field name="name">Capital Redemption Reserve</field>
+ <field name="code">11111</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11112">
+ <field name="name">Securities Premium Reserve</field>
+ <field name="code">11112</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11113">
+ <field name="name">Debenture Redeemption Reserve</field>
+ <field name="code">11113</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11114">
+ <field name="name">Revaluation Reserve</field>
+ <field name="code">11114</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11115">
+ <field name="name">Shares Option Outstanding Account</field>
+ <field name="code">11115</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11116">
+ <field name="name">Other Reserve</field>
+ <field name="code">11116</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11117">
+ <field name="name">Surplus (Profit and Loss Account)</field>
+ <field name="code">11117</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1112">
+ <field name="name">Money Received Against Share Warrants</field>
+ <field name="code">1112</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+
+ <!-- Share application money pending allotment -->
+ <record model="account.account.template" id="c1121">
+ <field name="name">Share Application Money Pending Allotment</field>
+ <field name="code">1121</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Non-Current Liabilities -->
+ <record model="account.account.template" id="c113011">
+ <field name="name">Bank Loan (Long Term)</field>
+ <field name="code">113011</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c113021">
+ <field name="name">From Others</field>
+ <field name="code">113021</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1131">
+ <field name="name">Deferred Tax Liabilities (Net)</field>
+ <field name="code">1131</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1132">
+ <field name="name">Other Long Term Liabilities</field>
+ <field name="code">1132</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1133">
+ <field name="name">Long Term Provisions</field>
+ <field name="code">1133</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Current Liabilities -->
+ <!-- Short Term Borrowings -->
+ <record model="account.account.template" id="c114011">
+ <field name="name">Bank Loan (Short Term)</field>
+ <field name="code">114011</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11402">
+ <field name="name">Loans And Advances From Related Parties</field>
+ <field name="code">11402</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11403">
+ <field name="name">Depsoits</field>
+ <field name="code">11403</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11404">
+ <field name="name">Others</field>
+ <field name="code">11404</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Trade Payables -->
+ <record model="account.account.template" id="c11411">
+ <field name="name">Sundry Creditors For Material/Supplies</field>
+ <field name="code">11411</field>
+ <field name="user_type_id" ref="account.data_account_type_payable"/>
+ <field name="reconcile" eval="True"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11412">
+ <field name="name">Sundry Creditors For Services</field>
+ <field name="code">11412</field>
+ <field name="user_type_id" ref="account.data_account_type_payable"/>
+ <field name="reconcile" eval="True"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Other current liabilities -->
+ <record model="account.account.template" id="c1142111">
+ <field name="name">Excise Duty Payable</field>
+ <field name="code">1142111</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1142112">
+ <field name="name">Education Cess Payable On Excise Duty</field>
+ <field name="code">1142112</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1142113">
+ <field name="name">Higher Education Cess Payable On Excise Duty</field>
+ <field name="code">1142113</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1142121">
+ <field name="name">Service Tax Payable</field>
+ <field name="code">1142121</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1142122">
+ <field name="name">Education Cess Payable On Service Tax</field>
+ <field name="code">1142122</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1142123">
+ <field name="name">Higher Education Cess Payable On Service Tax</field>
+ <field name="code">1142123</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114213">
+ <field name="name">TDS Paybale</field>
+ <field name="code">114213</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114214">
+ <field name="name">Central Sales Tax Payable</field>
+ <field name="code">114214</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114215">
+ <field name="name">VAT Payable</field>
+ <field name="code">114215</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11422">
+ <field name="name">Out Standing Cheques for Clearance</field>
+ <field name="code">11422</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c11423">
+ <field name="name">Advance From Customers</field>
+ <field name="code">11423</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Short Term Provisions -->
+ <record model="account.account.template" id="c114301">
+ <field name="name">EPF Payable</field>
+ <field name="code">114301</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114302">
+ <field name="name">Unpaid Remuneration</field>
+ <field name="code">114302</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114311">
+ <field name="name">Electricity And Power Charges Payable</field>
+ <field name="code">114311</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114312">
+ <field name="name">Employee Providend Fund Payable</field>
+ <field name="code">114312</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114313">
+ <field name="name">Internet Expenses Payable</field>
+ <field name="code">114313</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114314">
+ <field name="name">Mobile Expenses Payable</field>
+ <field name="code">114314</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114315">
+ <field name="name">Secueity Expenses Payable</field>
+ <field name="code">114315</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114316">
+ <field name="name">Telephone Expenses Payable</field>
+ <field name="code">114316</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114317">
+ <field name="name">Wages Payable</field>
+ <field name="code">114317</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114318">
+ <field name="name">Provision For Taxation</field>
+ <field name="code">114318</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c114319">
+ <field name="name">Provision For Expenses</field>
+ <field name="code">114319</field>
+ <field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+
+ <!-- Assets -->
+ <!-- Tangible Assets -->
+ <record model="account.account.template" id="c120101">
+ <field name="name">Land</field>
+ <field name="code">120101</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120102">
+ <field name="name">Buildings</field>
+ <field name="code">120102</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120103">
+ <field name="name">Plant And Equipments</field>
+ <field name="code">120103</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120104">
+ <field name="name">Furnitures And Fixtures</field>
+ <field name="code">120104</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120105">
+ <field name="name">Vehicles</field>
+ <field name="code">120105</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120106">
+ <field name="name">Computer/Laptops</field>
+ <field name="code">120106</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120107">
+ <field name="name">Office Equipments</field>
+ <field name="code">120107</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Intangible Assets -->
+ <record model="account.account.template" id="c120111">
+ <field name="name">Goodwill</field>
+ <field name="code">120111</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Capital Work-in-progress -->
+ <record model="account.account.template" id="c120120">
+ <field name="name">Building Under Construction</field>
+ <field name="code">120120</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Intangible Assets Under Development -->
+ <record model="account.account.template" id="c12013">
+ <field name="name">Intangible Assets Under Development</field>
+ <field name="code">12013</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Non-current investments-->
+ <record model="account.account.template" id="c12020">
+ <field name="name">Investment In Property</field>
+ <field name="code">12020</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12021">
+ <field name="name">Investment In Equity Instrument</field>
+ <field name="code">12021</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12022">
+ <field name="name">Investment In Preference Shares</field>
+ <field name="code">12022</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12023">
+ <field name="name">Investment In Government Or Trust Securities</field>
+ <field name="code">12023</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12024">
+ <field name="name">Investment In Debentures And Bonds</field>
+ <field name="code">12024</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12025">
+ <field name="name">Investment In Mutual Fund</field>
+ <field name="code">12025</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12026">
+ <field name="name">Investment In Partnership Firm</field>
+ <field name="code">12026</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120270">
+ <field name="name">Gold</field>
+ <field name="code">120270</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120271">
+ <field name="name">Fixed Deposit With Banks-Earmarked</field>
+ <field name="code">120271</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Deferred tax assets (net)-->
+ <record model="account.account.template" id="c1203">
+ <field name="name">Deferred Tax Assets (Net)</field>
+ <field name="code">1203</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Long Term Loans and Advances-->
+ <record model="account.account.template" id="c120411">
+ <field name="name">Secured, Considered Good</field>
+ <field name="code">120411</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120412">
+ <field name="name">Unsecured, Considered Good</field>
+ <field name="code">120412</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120413">
+ <field name="name">Doubtful</field>
+ <field name="code">120413</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1204211">
+ <field name="name">Earnest Money Deposit</field>
+ <field name="code">1204211</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1204212">
+ <field name="name">Other Deposit</field>
+ <field name="code">1204212</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120422">
+ <field name="name">Unsecured, Considered Good</field>
+ <field name="code">120422</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120423">
+ <field name="name">Doubtful</field>
+ <field name="code">120423</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12043">
+ <field name="name">Loans And Advances To Related Parties</field>
+ <field name="code">12043</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12044">
+ <field name="name">Other Loans And Advances</field>
+ <field name="code">12044</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Other Non Current Assets-->
+ <record model="account.account.template" id="c120511">
+ <field name="name">Secured, Considered Good</field>
+ <field name="code">120511</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120512">
+ <field name="name">Unsecured, Considered Good</field>
+ <field name="code">120512</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120513">
+ <field name="name">Doubtful</field>
+ <field name="code">120513</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120521">
+ <field name="name">Preliminery Expense</field>
+ <field name="code">120521</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c120522">
+ <field name="name">Software</field>
+ <field name="code">120522</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12053">
+ <field name="name">Others</field>
+ <field name="code">12053</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Current Assets -->
+ <!--Current Investment-->
+ <record model="account.account.template" id="c12110">
+ <field name="name">Investment In Equity</field>
+ <field name="code">12110</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12111">
+ <field name="name">Investment In Preference Shares</field>
+ <field name="code">12111</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12112">
+ <field name="name">Investment In Government Securities</field>
+ <field name="code">12112</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12113">
+ <field name="name">Investment In Debentures And Bonds</field>
+ <field name="code">12113</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12114">
+ <field name="name">Investment In Mutual Fund</field>
+ <field name="code">12114</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12115">
+ <field name="name">Investment In Partnership Firm</field>
+ <field name="code">12115</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12116">
+ <field name="name">In Short Term Fixed Deposits</field>
+ <field name="code">12116</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Inventories-->
+ <record model="account.account.template" id="c12120">
+ <field name="name">Raw Material</field>
+ <field name="code">12120</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12121">
+ <field name="name">Work-In-Progress</field>
+ <field name="code">12121</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12122">
+ <field name="name">Finished Goods</field>
+ <field name="code">12122</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12123">
+ <field name="name">Stock-In-Trade</field>
+ <field name="code">12123</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12124">
+ <field name="name">Stores And Spares</field>
+ <field name="code">12124</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12125">
+ <field name="name">Loose Tools</field>
+ <field name="code">12125</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12126">
+ <field name="name">Other With Job Worker</field>
+ <field name="code">12126</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12127">
+ <field name="name">Goods-In-Transit</field>
+ <field name="code">12127</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Trade Recievables-->
+ <record model="account.account.template" id="c121311">
+ <field name="name">Secured, Considered Good</field>
+ <field name="code">121311</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121312">
+ <field name="name">Unsecured, Considered Good</field>
+ <field name="code">121312</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121313">
+ <field name="name">Doubtful</field>
+ <field name="code">121313</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121321">
+ <field name="name">Secured, Considered Good</field>
+ <field name="code">121321</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121322">
+ <field name="name">Unsecured, Considered Good</field>
+ <field name="code">121322</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121323">
+ <field name="name">Doubtful</field>
+ <field name="code">121323</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c12133">
+ <field name="name">Sundry Debtors</field>
+ <field name="code">12133</field>
+ <field name="user_type_id" ref="account.data_account_type_receivable"/>
+ <field name="reconcile" eval="True"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+
+ <!--Short Terms Loans and Advances-->
+ <record model="account.account.template" id="c1215111">
+ <field name="name">Advance To Associate Concerns</field>
+ <field name="code">1215111</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1215121">
+ <field name="name">Unsecured Recoverable in Cash or in Kind or for Value to be Received</field>
+ <field name="code">1215121</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121513">
+ <field name="name">Doubtful</field>
+ <field name="code">121513</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121521">
+ <field name="name">Advance To Suppliers</field>
+ <field name="code">121521</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121522">
+ <field name="name">Advance Income Tax/Refund Due</field>
+ <field name="code">121522</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121523">
+ <field name="name">Balance With Revenue Authorities (Indirect Taxes)</field>
+ <field name="code">121523</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121524">
+ <field name="name">Prepaid Expenses</field>
+ <field name="code">121524</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Other current assets -->
+ <record model="account.account.template" id="c121610">
+ <field name="name">Sales Tax Receivable</field>
+ <field name="code">121610</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121611">
+ <field name="name">VAT Receivable</field>
+ <field name="code">121611</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1216121">
+ <field name="name">Excise Duty Receivable</field>
+ <field name="code">1216121</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1216122">
+ <field name="name">Education Cess Receivable On Excise Duty</field>
+ <field name="code">1216122</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1216123">
+ <field name="name">Higher Education Cess Receivable On Excise Duty</field>
+ <field name="code">1216123</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1216131">
+ <field name="name">Service Tax Receivable</field>
+ <field name="code">1216131</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1216132">
+ <field name="name">Education Cess Receivable On Service Tax</field>
+ <field name="code">1216132</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c1216133">
+ <field name="name">Higher Education Cess Receivable On Service Tax</field>
+ <field name="code">1216133</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121614">
+ <field name="name">TDS Receivable</field>
+ <field name="code">121614</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c121621">
+ <field name="name">Preliminary Expense</field>
+ <field name="code">121621</field>
+ <field name="user_type_id" ref="account.data_account_type_current_assets"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Revenue -->
+ <!--Revenue from Operations-->
+ <record model="account.account.template" id="c2011">
+ <field name="name">Central Sales(Exclusive of Excise Duty)</field>
+ <field name="code">2011</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2012">
+ <field name="name">Export Sales</field>
+ <field name="code">2012</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2013">
+ <field name="name">Sales of Services</field>
+ <field name="code">2013</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2014">
+ <field name="name">Job Work Receipts</field>
+ <field name="code">2014</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2015">
+ <field name="name">Product Sales</field>
+ <field name="code">2015</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2016">
+ <field name="name">Other Operating Income</field>
+ <field name="code">2016</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Other Income-->
+ <record model="account.account.template" id="c2021">
+ <field name="name">Interest</field>
+ <field name="code">2021</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2022">
+ <field name="name">Other Financial Services</field>
+ <field name="code">2022</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2023">
+ <field name="name">Other Non Operating Income</field>
+ <field name="code">2023</field>
+ <field name="user_type_id" ref="account.data_account_type_revenue"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Cost Of Materials Consumed-->
+ <record model="account.account.template" id="c2101">
+ <field name="name">Opening Stock</field>
+ <field name="code">2101</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21021">
+ <field name="name">Raw Material</field>
+ <field name="code">21021</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21022">
+ <field name="name">Stores And Consumables</field>
+ <field name="code">21022</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2103">
+ <field name="name">Closing Stock</field>
+ <field name="code">2103</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!-- Purchase of Stock-in-Trade -->
+ <record model="account.account.template" id="c2111">
+ <field name="name">Purchase of Stock-In-Trade</field>
+ <field name="code">2111</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Changes in inventories of finished goods, work-in-progress and Stock-in-Trade-->
+ <record model="account.account.template" id="c212">
+ <field name="name">Changes In Inventories of Finished Goods, Work-In-Progress And Stock-In-Trade</field>
+ <field name="code">212</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Employement Benefit Expenses-->
+ <record model="account.account.template" id="c2131">
+ <field name="name">Salaries, Bonus, PF And ESIC</field>
+ <field name="code">2131</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2132">
+ <field name="name">Directors Remuneration</field>
+ <field name="code">2132</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2133">
+ <field name="name">Directors Setting Fees</field>
+ <field name="code">2133</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2134">
+ <field name="name">Staff Welfare Expense</field>
+ <field name="code">2134</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2135">
+ <field name="name">Commision To M.D</field>
+ <field name="code">2135</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2136">
+ <field name="name">Commision To Joint M.D</field>
+ <field name="code">2136</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Financial Cost-->
+ <record model="account.account.template" id="c2141">
+ <field name="name">Interest On Cash Credit Facality</field>
+ <field name="code">2141</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2142">
+ <field name="name">Interest On Car Loan</field>
+ <field name="code">2142</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2143">
+ <field name="name">Interest On Other Loans</field>
+ <field name="code">2143</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2144">
+ <field name="name">Bank Charges</field>
+ <field name="code">2144</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2145">
+ <field name="name">Bank Gurantee Charges</field>
+ <field name="code">2145</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Depreciation and Amortization Expense-->
+ <record model="account.account.template" id="c2151">
+ <field name="name">Depreciation</field>
+ <field name="code">2151</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2152">
+ <field name="name">Preliminary Expenses</field>
+ <field name="code">2152</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <!--Other Administrative Expenses-->
+ <record model="account.account.template" id="c21601">
+ <field name="name">Jobwork Charges</field>
+ <field name="code">21601</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21602">
+ <field name="name">Stores and Spares</field>
+ <field name="code">21602</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21603">
+ <field name="name">Workshop Expense</field>
+ <field name="code">21603</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21604">
+ <field name="name">Centeral Sales Tax</field>
+ <field name="code">21604</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21605">
+ <field name="name">Machinery Repair and Maintenance</field>
+ <field name="code">21605</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21606">
+ <field name="name">Freight Forwarding and Octroi Expenses (Local)</field>
+ <field name="code">21606</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21607">
+ <field name="name">Electrical Repairing Expense</field>
+ <field name="code">21607</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21608">
+ <field name="name">Material Testing Expense</field>
+ <field name="code">21608</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21609">
+ <field name="name">Power and Fuel Charges</field>
+ <field name="code">21609</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216091">
+ <field name="name">Packing Material Expense</field>
+ <field name="code">216091</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216092">
+ <field name="name">Measuring Expense</field>
+ <field name="code">216092</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216093">
+ <field name="name">Processing Labour Charges</field>
+ <field name="code">216093</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21611">
+ <field name="name">Car Expenses (Including Insurance)</field>
+ <field name="code">21611</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21612">
+ <field name="name">Travelling Expenses (Including Foreign Travelling)</field>
+ <field name="code">21612</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21613">
+ <field name="name">Repair And Maintenance Building</field>
+ <field name="code">21613</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21614">
+ <field name="name">Computer Maintenace</field>
+ <field name="code">21614</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21615">
+ <field name="name">General Expenses</field>
+ <field name="code">21615</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21616">
+ <field name="name">Internet And Website Expenses</field>
+ <field name="code">21616</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21617">
+ <field name="name">Insurance Expenses</field>
+ <field name="code">21617</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21618">
+ <field name="name">Telephone Expense</field>
+ <field name="code">21618</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21619">
+ <field name="name">Labour Welfare Expenses</field>
+ <field name="code">21619</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216191">
+ <field name="name">Legal Expenses</field>
+ <field name="code">216191</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216192">
+ <field name="name">Postage And Telegram</field>
+ <field name="code">216192</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216193">
+ <field name="name">Professional Charges</field>
+ <field name="code">216193</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216194">
+ <field name="name">Security Expesnes</field>
+ <field name="code">216194</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216195">
+ <field name="name">Stationery Expenses</field>
+ <field name="code">216195</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216196">
+ <field name="name">Auditors Remuneration</field>
+ <field name="code">216196</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216197">
+ <field name="name">Rent Rates And Taxes</field>
+ <field name="code">216197</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216198">
+ <field name="name">Tender Fee And Testing Charges</field>
+ <field name="code">216198</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c216199">
+ <field name="name">Interest On Delayed Payment of Taxes</field>
+ <field name="code">216199</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161991">
+ <field name="name">Excise/ Service Tax Expenses</field>
+ <field name="code">2161991</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161992">
+ <field name="name">Advertisement And Publicity</field>
+ <field name="code">2161992</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161993">
+ <field name="name">Donation</field>
+ <field name="code">2161993</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161994">
+ <field name="name">Export Expenses</field>
+ <field name="code">2161994</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161995">
+ <field name="name">Internal Audit Fee</field>
+ <field name="code">2161995</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161996">
+ <field name="name">Conveyance Expense</field>
+ <field name="code">2161996</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161997">
+ <field name="name">Packing and Forwarding Expense</field>
+ <field name="code">2161997</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161998">
+ <field name="name">Annual Service Fees</field>
+ <field name="code">2161998</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2161999">
+ <field name="name">Loan Processing Fees</field>
+ <field name="code">2161999</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21619991">
+ <field name="name">Office Cleaning Expense</field>
+ <field name="code">21619991</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21619992">
+ <field name="name">Prelimenary Expense W/Off</field>
+ <field name="code">21619992</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21619993">
+ <field name="name">Software Expense W/Off</field>
+ <field name="code">21619993</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21619994">
+ <field name="name">Custom Duty</field>
+ <field name="code">21619994</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21619995">
+ <field name="name">Stamping Charge</field>
+ <field name="code">21619995</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c21619996">
+ <field name="name">Post and Courrier Charges</field>
+ <field name="code">21619996</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+
+
+ <!-- Foreign exchange account -->
+ <record model="account.account.template" id="c2017">
+ <field name="name">Foreign Exchange Profit</field>
+ <field name="code">2017</field>
+ <field name="user_type_id" ref="account.data_account_type_other_income"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+ <record model="account.account.template" id="c2170">
+ <field name="name">Foreign Exchange Loss</field>
+ <field name="code">2170</field>
+ <field name="user_type_id" ref="account.data_account_type_expenses"/>
+ <field name="reconcile" eval="False"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ </record>
+
+ <!-- Account Chart Template -->
+ <record id="indian_chart_template_schedule6" model="account.chart.template">
+ <field name="property_account_receivable_id" ref="c12133"/>
+ <field name="property_account_payable_id" ref="c11411"/>
+ <field name="property_account_expense_categ_id" ref="c21021"/>
+ <field name="property_account_income_categ_id" ref="c2015"/>
+ <field name="income_currency_exchange_account_id" ref="c2017"/>
+ <field name="expense_currency_exchange_account_id" ref="c2170"/>
+ </record>
+
+ </data>
+</openerp> \ No newline at end of file
diff --git a/addons/l10n_in_schedule6/l10n_in_schedule6_tax_template.xml b/addons/l10n_in_schedule6/l10n_in_schedule6_tax_template.xml
new file mode 100644
index 00000000000..4b98a7efafa
--- /dev/null
+++ b/addons/l10n_in_schedule6/l10n_in_schedule6_tax_template.xml
@@ -0,0 +1,842 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <!-- Account Tags -->
+ <record id="st_tag_in_01" model="account.account.tag">
+ <field name="name">Tax to Pay</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_02" model="account.account.tag">
+ <field name="name">C Forms</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_03" model="account.account.tag">
+ <field name="name">C Forms Tax Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_04" model="account.account.tag">
+ <field name="name">C Forms Tax Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_05" model="account.account.tag">
+ <field name="name">Excise Duty</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_06" model="account.account.tag">
+ <field name="name">Excise Duty 12.36%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_07" model="account.account.tag">
+ <field name="name">Excise Duty Collected on Sales</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_08" model="account.account.tag">
+ <field name="name">Education Cess 2% Excise Duty Collected on Sales</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_09" model="account.account.tag">
+ <field name="name">Higher Education Cess 1% Excise Duty Collected on Sales</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_10" model="account.account.tag">
+ <field name="name">Excise Duty Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_11" model="account.account.tag">
+ <field name="name">Education Cess 2% Excise Duty Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_12" model="account.account.tag">
+ <field name="name">Higher Education Cess 1% Excise Duty Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_13" model="account.account.tag">
+ <field name="name">Sales Tax</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_14" model="account.account.tag">
+ <field name="name">Sales Tax 4%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_15" model="account.account.tag">
+ <field name="name">Sales Tax 4% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_16" model="account.account.tag">
+ <field name="name">Sales Tax 4% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_17" model="account.account.tag">
+ <field name="name">Sales Tax 12%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_18" model="account.account.tag">
+ <field name="name">Sales Tax 12% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_19" model="account.account.tag">
+ <field name="name">Sales Tax 12% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_20" model="account.account.tag">
+ <field name="name">Sales Tax 15%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_21" model="account.account.tag">
+ <field name="name">Sales Tax 15% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_22" model="account.account.tag">
+ <field name="name">Sales Tax 15% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_23" model="account.account.tag">
+ <field name="name">Service Tax</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_24" model="account.account.tag">
+ <field name="name">Service Tax 12.36%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_25" model="account.account.tag">
+ <field name="name">Service Tax Collected on Sales of Services</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_26" model="account.account.tag">
+ <field name="name">Education Cess 2% Service Tax Collected on Sales of Services</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_27" model="account.account.tag">
+ <field name="name">Higher Education Cess 1% Service Tax Collected on Sales of Services</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_28" model="account.account.tag">
+ <field name="name">Service Tax Paid on Purchase of Services</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_29" model="account.account.tag">
+ <field name="name">Education Cess 2% Service Tax Paid on Purchase of Services</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_30" model="account.account.tag">
+ <field name="name">Higher Education Cess 1% Service Tax Paid on Purchase of Services</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_31" model="account.account.tag">
+ <field name="name">VAT</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_32" model="account.account.tag">
+ <field name="name">VAT 4%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_33" model="account.account.tag">
+ <field name="name">VAT 4% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_34" model="account.account.tag">
+ <field name="name">VAT 4% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_35" model="account.account.tag">
+ <field name="name">VAT 8%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_36" model="account.account.tag">
+ <field name="name">VAT 8% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_37" model="account.account.tag">
+ <field name="name">VAT 8% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_38" model="account.account.tag">
+ <field name="name">VAT 10%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_39" model="account.account.tag">
+ <field name="name">VAT 10% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_40" model="account.account.tag">
+ <field name="name">VAT 10% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_41" model="account.account.tag">
+ <field name="name">VAT 12.5%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_42" model="account.account.tag">
+ <field name="name">VAT 12.5% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_43" model="account.account.tag">
+ <field name="name">VAT 12.5% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_44" model="account.account.tag">
+ <field name="name">Additional VAT 1%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_45" model="account.account.tag">
+ <field name="name">Additional VAT 1% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_46" model="account.account.tag">
+ <field name="name">Additional VAT 1% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_47" model="account.account.tag">
+ <field name="name">Additional VAT 2.5%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_48" model="account.account.tag">
+ <field name="name">Additional VAT 2.5% Collected on Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_49" model="account.account.tag">
+ <field name="name">Additional VAT 2.5% Paid on Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_50" model="account.account.tag">
+ <field name="name">Tax Bases</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_51" model="account.account.tag">
+ <field name="name">Base C Forms</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_52" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_53" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_54" model="account.account.tag">
+ <field name="name">Base Excise Duty</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_55" model="account.account.tag">
+ <field name="name">Base Excise Duty 12.36%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_56" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_57" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_58" model="account.account.tag">
+ <field name="name">Base Sales Tax</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_59" model="account.account.tag">
+ <field name="name">Base Sales Tax 4%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_60" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_61" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_62" model="account.account.tag">
+ <field name="name">Base Sales Tax 12%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_63" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_64" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_65" model="account.account.tag">
+ <field name="name">Base Sales Tax 15%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_66" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_67" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_68" model="account.account.tag">
+ <field name="name">Base Service Tax</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_69" model="account.account.tag">
+ <field name="name">Base Service Tax 12.36%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_70" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_71" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_72" model="account.account.tag">
+ <field name="name">Base VAT</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_73" model="account.account.tag">
+ <field name="name">Base VAT 4%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_74" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_75" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_76" model="account.account.tag">
+ <field name="name">Base VAT 8%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_77" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_78" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_79" model="account.account.tag">
+ <field name="name">Base VAT 10%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_80" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_81" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_82" model="account.account.tag">
+ <field name="name">Base VAT 12.5%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_83" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_84" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_85" model="account.account.tag">
+ <field name="name">Base Additional VAT 1%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_86" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_87" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_88" model="account.account.tag">
+ <field name="name">Base Additional VAT 2.5%</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_89" model="account.account.tag">
+ <field name="name">Base of Sale</field>
+ <field name="applicability">taxes</field>
+ </record>
+
+ <record id="st_tag_in_90" model="account.account.tag">
+ <field name="name">Base of Purchase</field>
+ <field name="applicability">taxes</field>
+ </record>
+ <!-- Account Tax Templates -->
+
+ <record id="input_tax_15" model="account.tax.template">
+ <field name="name">(schedule6)Input Sales Tax @ 15%</field>
+ <field name="description">(schedule6)Input Sales Tax @ 15%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">15</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c114214"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6, 0, [ref('st_tag_in_21'), ref('st_tag_in_66')])]"/>
+ </record>
+ <record id="input_tax_12" model="account.tax.template">
+ <field name="name">(schedule6)Input Sales Tax @ 12%</field>
+ <field name="description">(schedule6)Input Sales Tax @ 12%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">12</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c114214"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6, 0, [ref('st_tag_in_18'), ref('st_tag_in_63')])]"/>
+ </record>
+ <record id="input_tax_4" model="account.tax.template">
+ <field name="name">(schedule6)Input Sales Tax @ 4%</field>
+ <field name="description">(schedule6)Input Sales Tax @ 4%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">4</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c114214"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6, 0, [ref('st_tag_in_15'), ref('st_tag_in_60')])]"/>
+ </record>
+ <record id="add_input_vat_1" model="account.tax.template">
+ <field name="name">(schedule6)Additional Input VAT @ 1%</field>
+ <field name="description">(schedule6)Additional Input VAT @ 1%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">1</field>
+ <field name="sequence">15</field>
+ <field name="account_id" ref="c114215"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_86'), ref('st_tag_in_45')])]"/>
+ </record>
+ <record id="input_vat_12" model="account.tax.template">
+ <field name="name">(schedule6)Input VAT @ 12.5%</field>
+ <field name="description">(schedule6)Input VAT @ 12.5%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">12.5</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c114215"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_83'), ref('st_tag_in_42')])]"/>
+ </record>
+ <record id="add_input_vat_2" model="account.tax.template">
+ <field name="name">(schedule6)Additional Input VAT @ 2.5%</field>
+ <field name="description">(schedule6)Additional Input VAT @ 2.5%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">2.5</field>
+ <field name="sequence">15</field>
+ <field name="account_id" ref="c114215"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_89'), ref('st_tag_in_48')])]"/>
+ </record>
+ <record id="sale_vat_8" model="account.tax.template">
+ <field name="name">(schedule6)Input VAT @ 8%</field>
+ <field name="description">(schedule6)Input VAT @ 8%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">8</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c114215"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_77'), ref('st_tag_in_36')])]"/>
+ </record>
+ <record id="sale_vat_10" model="account.tax.template">
+ <field name="name">(schedule6)Input VAT @ 10%</field>
+ <field name="description">(schedule6)Input VAT @ 10%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">10</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c114215"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_39'), ref('st_tag_in_80')])]"/>
+ </record>
+ <record id="sale_tax_12" model="account.tax.template">
+ <field name="name">(schedule6)Input Tax 12%</field>
+ <field name="description">(schedule6)Input Tax 12%</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">12</field>
+ <field name="sequence">1</field>
+ <field name="account_id" ref="c1142111"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_07')])]"/>
+ </record>
+ <record id="sale_edu_cess_Excise_Duty_2" model="account.tax.template">
+ <field name="name">(schedule6)Input Education Cess @ 2% On Excise Duty</field>
+ <field name="description">(schedule6)Input Education Cess @ 2% On Excise Duty</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">0.24</field>
+ <field name="sequence">2</field>
+ <field name="account_id" ref="c1142112"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_08')])]"/>
+ </record>
+ <record id="sale_hedu_cess_Excise_Duty_1" model="account.tax.template">
+ <field name="name">(schedule6)Input Higher Education Cess @ 1% On Excise Duty</field>
+ <field name="description">(schedule6)Input Higher Education Cess @ 1% On Excise Duty</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">0.1224</field>
+ <field name="sequence">3</field>
+ <field name="account_id" ref="c1142113"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_09')])]"/>
+ </record>
+ <record id="sale_Excise_Duty_12" model="account.tax.template">
+ <field name="name">(schedule6)Input Excise Duty @ 12.36%</field>
+ <field name="description">(schedule6)Input Excise Duty @ 12.36%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">group</field>
+ <field name="amount">0</field>
+ <field name="sequence">1</field>
+ <field name="account_id" ref="c1142111"/>
+ <field name="children_tax_ids" eval="[(6, 0, [ref('sale_tax_12'),ref('sale_edu_cess_Excise_Duty_2'),ref('sale_hedu_cess_Excise_Duty_1')])]"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_56')])]"/>
+ </record>
+ <record id="sale_service_tax12" model="account.tax.template">
+ <field name="name">(schedule6)Input Service Tax 12%</field>
+ <field name="description">(schedule6)Input Service Tax 12%</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">12</field>
+ <field name="sequence">13</field>
+ <field name="account_id" ref="c1142121"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6, 0, [ref('st_tag_in_25')])]"/>
+ </record>
+ <record id="sale_edu_cess_service_tax_2" model="account.tax.template">
+ <field name="name">(schedule6)Input Education Cess @ 2% On Service Tax</field>
+ <field name="description">(schedule6)Input Education Cess @ 2% On Service Tax</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">0.24</field>
+ <field name="sequence">14</field>
+ <field name="account_id" ref="c1142122"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_26')])]"/>
+ </record>
+ <record id="sale_high_edu_service_tax_1" model="account.tax.template">
+ <field name="name">(schedule6)Input Higher Education Cess @ 1% On Service Tax</field>
+ <field name="description">(schedule6)Input Higher Education Cess @ 1% On Service Tax</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">0.1224</field>
+ <field name="sequence">15</field>
+ <field name="account_id" ref="c1142123"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_27')])]"/>
+ </record>
+ <record id="sale_service_tax_12" model="account.tax.template">
+ <field name="name">(schedule6)Input Service Tax @ 12.36%</field>
+ <field name="description">(schedule6)Input Service Tax @ 12.36%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">group</field>
+ <field name="amount">12</field>
+ <field name="include_base_amount">True</field>
+ <field name="sequence">8</field>
+ <field name="account_id" ref="c1142121"/>
+ <field name="children_tax_ids" eval="[(6, 0, [ref('sale_service_tax12'),ref('sale_edu_cess_service_tax_2'),ref('sale_high_edu_service_tax_1')])]"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_70')])]"/>
+ </record>
+ <record id="input_vat_4" model="account.tax.template">
+ <field name="name">(schedule6)Input VAT @ 4%</field>
+ <field name="description">(schedule6)Input VAT @ 4%</field>
+ <field name="type_tax_use">sale</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">4</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c114215"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6, 0, [ref('st_tag_in_33'), ref('st_tag_in_74')])]"/>
+ </record>
+
+ <!--output purchase tax-->
+ <record id="output_tax_15" model="account.tax.template">
+ <field name="name">(schedule6)Output Purchase Tax @ 15%</field>
+ <field name="description">(schedule6)Output Purchase Tax @ 15%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">15</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c121610"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6, 0, [ref('st_tag_in_22'), ref('st_tag_in_67')])]"/>
+ </record>
+ <record id="output_tax_12" model="account.tax.template">
+ <field name="name">(schedule6)Output Purchase Tax @ 12%</field>
+ <field name="description">(schedule6)Output Purchase Tax @ 12%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">12</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c121610"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6, 0, [ref('st_tag_in_19'), ref('st_tag_in_64')])]"/>
+ </record>
+ <record id="output_tax_4" model="account.tax.template">
+ <field name="name">(schedule6)Output Purchase Tax @ 4%</field>
+ <field name="description">(schedule6)Output Purchase Tax @ 4%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">4</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c121610"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_61'), ref('st_tag_in_16')])]"/>
+ </record>
+ <record id="add_output_vat_1" model="account.tax.template">
+ <field name="name">(schedule6)Additional Output VAT @ 1%</field>
+ <field name="description">(schedule6)Additional Output VAT @ 1%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">1</field>
+ <field name="sequence">15</field>
+ <field name="account_id" ref="c121611"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_87'), ref('st_tag_in_46')])]"/>
+ </record>
+ <record id="output_vat_12" model="account.tax.template">
+ <field name="name">(schedule6)Output VAT @ 12.5%</field>
+ <field name="description">(schedule6)Output VAT @ 12.5%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">12.5</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c121611"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_43'), ref('st_tag_in_84')])]"/>
+ </record>
+ <record id="add_output_vat_2" model="account.tax.template">
+ <field name="name">(schedule6)Additional Output VAT @ 2.5%</field>
+ <field name="description">(schedule6)Additional Output VAT @ 2.5%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">2.5</field>
+ <field name="sequence">15</field>
+ <field name="account_id" ref="c121611"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_90'), ref('st_tag_in_49')])]"/>
+ </record>
+ <record id="purchase_vat_8" model="account.tax.template">
+ <field name="name">(schedule6)Output VAT @ 8%</field>
+ <field name="description">(schedule6)Output VAT @ 8%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">8</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c121611"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_78'), ref('st_tag_in_37')])]"/>
+ </record>
+ <record id="purchase_vat_10" model="account.tax.template">
+ <field name="name">(schedule6)Output VAT @ 10%</field>
+ <field name="description">(schedule6)Output VAT @ 10%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">10</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c121611"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_81'), ref('st_tag_in_40')])]"/>
+ </record>
+ <record id="purchase_edu_cess_12" model="account.tax.template">
+ <field name="name">(schedule6)Output Tax 12%</field>
+ <field name="description">(schedule6)Output Tax 12%</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">12</field>
+ <field name="sequence">2</field>
+ <field name="account_id" ref="c1216121"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_10')])]"/>
+ </record>
+ <record id="purchase_edu_cess_Excise_Duty_2" model="account.tax.template">
+ <field name="name">(schedule6)Output Education Cess @ 2% Excise Duty</field>
+ <field name="description">(schedule6)Output Education Cess @ 2% Excise Duty</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">0.24</field>
+ <field name="sequence">3</field>
+ <field name="account_id" ref="c1216122"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_11')])]"/>
+ </record>
+ <record id="purchase_hedu_cess_Excise_Duty_1" model="account.tax.template">
+ <field name="name">(schedule6)Output Higher Education Cess @ 1% Excise Duty</field>
+ <field name="description">(schedule6)Output Higher Education Cess @ 1% Excise Duty</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">0.1224</field>
+ <field name="sequence">4</field>
+ <field name="account_id" ref="c1216123"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_12')])]"/>
+ </record>
+ <record id="purchase_Excise_Duty_12" model="account.tax.template">
+ <field name="name">(schedule6)Output Excise Duty @ 12.36%</field>
+ <field name="description">(schedule6)Output Excise Duty @ 12.36%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">group</field>
+ <field name="amount">12</field>
+ <field name="include_base_amount">True</field>
+ <field name="sequence">1</field>
+ <field name="account_id" ref="c1216121"/>
+ <field name="children_tax_ids" eval="[(6, 0, [ref('purchase_edu_cess_12'),ref('purchase_edu_cess_Excise_Duty_2'),ref('purchase_hedu_cess_Excise_Duty_1')])]"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_57')])]"/>
+ </record>
+ <record id="purchase_edu_service_tax12" model="account.tax.template">
+ <field name="name">(schedule6)Output Service Tax 12%</field>
+ <field name="description">(schedule6)Output Service Tax 12%</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">12</field>
+ <field name="sequence">9</field>
+ <field name="account_id" ref="c1216131"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_28')])]"/>
+ </record>
+ <record id="purchase_edu_cess_service_tax_2" model="account.tax.template">
+ <field name="name">(schedule6)Output Education Cess @ 2% On Service Tax</field>
+ <field name="description">(schedule6)Output Education Cess @ 2% On Service Tax</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">0.24</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c1216132"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_29')])]"/>
+ </record>
+ <record id="purchase_high_edu_service_tax_1" model="account.tax.template">
+ <field name="name">(schedule6)Output Higher Education Cess @ 1% On Service Tax</field>
+ <field name="description">(schedule6)Output Higher Education Cess @ 1% On Service Tax</field>
+ <field name="type_tax_use">none</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">0.1224</field>
+ <field name="sequence">11</field>
+ <field name="account_id" ref="c1216133"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_30')])]"/>
+ </record>
+ <record id="st_purchase_service_tax_12" model="account.tax.template">
+ <field name="name">(schedule6)Output Service Tax @ 12.36%</field>
+ <field name="description">(schedule6)Output Service Tax @ 12.36%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="include_base_amount">True</field>
+ <field name="amount_type">group</field>
+ <field name="amount">12</field>
+ <field name="sequence">8</field>
+ <field name="account_id" ref="c1216131"/>
+ <field name="children_tax_ids" eval="[(6, 0, [ref('purchase_edu_service_tax12'),ref('purchase_edu_cess_service_tax_2'),ref('purchase_high_edu_service_tax_1')])]"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_71')])]"/>
+ </record>
+ <record id="output_vat_4" model="account.tax.template">
+ <field name="name">(schedule6)Output VAT @ 4%</field>
+ <field name="description">(schedule6)Output VAT @ 4%</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="amount_type">percent</field>
+ <field name="amount">4</field>
+ <field name="sequence">10</field>
+ <field name="account_id" ref="c121611"/>
+ <field name="chart_template_id" ref="indian_chart_template_schedule6"/>
+ <field name="tag_ids" eval="[(6,0,[ref('st_tag_in_34'), ref('st_tag_in_75')])]"/>
+ </record>
+
+ </data>
+</openerp>
diff --git a/addons/l10n_in_schedule6/static/description/icon.png b/addons/l10n_in_schedule6/static/description/icon.png
new file mode 100644
index 00000000000..ddaf38f8b6d
--- /dev/null
+++ b/addons/l10n_in_schedule6/static/description/icon.png
Binary files differ
diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index 216aca10619..8445c0e06fe 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -1690,9 +1690,10 @@ class MailThread(models.AbstractModel):
return self._message_post_process_attachments(attachments, attachment_ids, {'model': attach_model, 'res_id': attach_res_id})
def _message_post_process_attachments(self, attachments, attachment_ids, message_data):
- IrAttachment, parameter_attachments = self.env['ir.attachment'], self.env['ir.attachment']
+ IrAttachment = self.env['ir.attachment']
m2m_attachment_ids = []
cid_mapping = {}
+ fname_mapping = {}
if attachment_ids:
filtered_attachment_ids = self.env['ir.attachment'].sudo().search([
('res_model', '=', 'mail.compose.message'),
@@ -1708,9 +1709,7 @@ class MailThread(models.AbstractModel):
name, content = attachment
elif len(attachment) == 3:
name, content, info = attachment
- if info and info.get('cid'):
- cid = info['cid']
- cid_mapping[cid] = name
+ cid = info and info.get('cid')
else:
continue
if isinstance(content, unicode):
@@ -1718,13 +1717,16 @@ class MailThread(models.AbstractModel):
data_attach = {
'name': name,
'datas': base64.b64encode(str(content)),
- 'datas_fname': cid or name,
+ 'datas_fname': name,
'description': name,
'res_model': message_data['model'],
'res_id': message_data['res_id'],
}
- parameter_attachments |= IrAttachment.create(data_attach)
- m2m_attachment_ids += [(4, attach.id) for attach in parameter_attachments]
+ new_attachment = IrAttachment.create(data_attach)
+ m2m_attachment_ids.append((4, new_attachment.id))
+ if cid:
+ cid_mapping[cid] = new_attachment
+ fname_mapping[name] = new_attachment
if cid_mapping and message_data.get('body'):
root = lxml.html.fromstring(tools.ustr(message_data['body']))
@@ -1732,12 +1734,11 @@ class MailThread(models.AbstractModel):
for node in root.iter('img'):
if node.get('src', '').startswith('cid:'):
cid = node.get('src').split('cid:')[1]
- fname = cid_mapping.get(cid, node.get('data-filename', ''))
- attachment = parameter_attachments.filtered(lambda attachment: attachment.datas_fname == cid)
+ attachment = cid_mapping.get(cid)
if not attachment:
- attachment = parameter_attachments.filtered(lambda attachment: attachment.datas_fname == fname)
+ attachment = fname_mapping.get(node.get('data-filename'), '')
if attachment:
- node.set('src', '/web/image/%s' % attachment.ids[0])
+ node.set('src', '/web/image/%s' % attachment.id)
postprocessed = True
if postprocessed:
body = lxml.html.tostring(root, pretty_print=False, encoding='UTF-8')
diff --git a/addons/maintenance/views/maintenance_views.xml b/addons/maintenance/views/maintenance_views.xml
index 6be82359009..446ae2c877d 100644
--- a/addons/maintenance/views/maintenance_views.xml
+++ b/addons/maintenance/views/maintenance_views.xml
@@ -312,7 +312,7 @@
<field name="owner_user_id" string="Owner"/>
</group>
<group>
- <field name="maintenance_team_id"/>
+ <field name="maintenance_team_id" attrs="{'required': [('period', '!=', 0)]}"/>
<field name="technician_user_id"/>
<field name="assign_date" groups="base.group_no_one"/>
<field name="scrap_date" groups="base.group_no_one"/>
diff --git a/addons/mass_mailing/models/mail_mail.py b/addons/mass_mailing/models/mail_mail.py
index 8dae482529f..3a69530db1a 100644
--- a/addons/mass_mailing/models/mail_mail.py
+++ b/addons/mass_mailing/models/mail_mail.py
@@ -7,8 +7,7 @@ import werkzeug.urls
from odoo import api, fields, models, tools
-
-URL_REGEX = r'(\bhref=[\'"]([^\'"]+)[\'"])'
+from openerp.addons.link_tracker.models.link_tracker import URL_REGEX
class MailMail(models.Model):
diff --git a/addons/mrp/models/product.py b/addons/mrp/models/product.py
index 7ecc6274636..25ef11da9a3 100644
--- a/addons/mrp/models/product.py
+++ b/addons/mrp/models/product.py
@@ -44,7 +44,12 @@ class ProductProduct(models.Model):
read_group_res = self.env['mrp.bom'].read_group([('product_id', 'in', self.ids)], ['product_id'], ['product_id'])
mapped_data = dict([(data['product_id'][0], data['product_id_count']) for data in read_group_res])
for product in self:
- product.bom_count = mapped_data.get(product.id, 0)
+ if product.product_tmpl_id.product_variant_count == 1:
+ bom_count = mapped_data.get(product.id, product.product_tmpl_id.bom_count)
+ else:
+ bom_count = mapped_data.get(product.id, 0)
+ product.bom_count = bom_count
+
def _compute_mo_count(self):
read_group_res = self.env['mrp.production'].read_group([('product_id', 'in', self.ids)], ['product_id'], ['product_id'])
diff --git a/addons/mrp/models/stock_move.py b/addons/mrp/models/stock_move.py
index df46c2461aa..3858b47f137 100644
--- a/addons/mrp/models/stock_move.py
+++ b/addons/mrp/models/stock_move.py
@@ -33,7 +33,7 @@ class StockMoveLots(models.Model):
def _check_lot_id(self):
if self.move_id.product_id.tracking == 'serial':
lots = set([])
- for move_lot in self.move_id.move_lot_ids.filtered(lambda r: not r.lot_produced_id):
+ for move_lot in self.move_id.active_move_lot_ids.filtered(lambda r: not r.lot_produced_id and r.lot_id):
if move_lot.lot_id in lots:
raise exceptions.UserError(_('You cannot use the same serial number in two different lines.'))
if float_compare(move_lot.quantity_done, 1.0, precision_rounding=move_lot.product_id.uom_id.rounding) == 1:
diff --git a/addons/mrp_repair/models/mrp_repair.py b/addons/mrp_repair/models/mrp_repair.py
index c23e810fd1f..866bde4858b 100644
--- a/addons/mrp_repair/models/mrp_repair.py
+++ b/addons/mrp_repair/models/mrp_repair.py
@@ -490,7 +490,10 @@ class RepairLine(models.Model):
if partner and self.product_id:
self.tax_id = partner.property_account_position_id.map_tax(self.product_id.taxes_id, self.product_id, partner).ids
if self.product_id:
- self.name = self.product_id.display_name
+ if partner:
+ self.name = self.product_id.with_context(lang=partner.lang).display_name
+ else:
+ self.name = self.product_id.display_name
self.product_uom = self.product_id.uom_id.id
warning = False
diff --git a/addons/mrp_repair/report/mrp_repair_reports.xml b/addons/mrp_repair/report/mrp_repair_reports.xml
index db73449155d..9963f87d614 100644
--- a/addons/mrp_repair/report/mrp_repair_reports.xml
+++ b/addons/mrp_repair/report/mrp_repair_reports.xml
@@ -5,7 +5,7 @@
string="Quotation / Order"
id="action_report_mrp_repair_order"
model="mrp.repair"
- name="mrp_repair.report_mrprepairorder"
+ name="mrp_repair.report_mrprepairorder2"
file="mrp_repair.report_mrprepairorder"
report_type="qweb-pdf"
/>
diff --git a/addons/mrp_repair/report/mrp_repair_templates_repair_order.xml b/addons/mrp_repair/report/mrp_repair_templates_repair_order.xml
index 02c7d02e543..826fca68b73 100644
--- a/addons/mrp_repair/report/mrp_repair_templates_repair_order.xml
+++ b/addons/mrp_repair/report/mrp_repair_templates_repair_order.xml
@@ -2,9 +2,9 @@
<odoo>
<data>
<template id="report_mrprepairorder">
- <t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
+ <t t-set="o" t-value="o.with_context({'lang': o.partner_id.lang})" />
<div class="page">
<div class="oe_structure"/>
@@ -153,6 +153,13 @@
</div>
</t>
</t>
+</template>
+
+<template id="report_mrprepairorder2">
+ <t t-call="report.html_container">
+ <t t-foreach="docs" t-as="doc">
+ <t t-call="mrp_repair.report_mrprepairorder" t-lang="doc.partner_id.lang"/>
+ </t>
</t>
</template>
</data>
diff --git a/addons/payment_authorize/models/authorize_request.py b/addons/payment_authorize/models/authorize_request.py
index 28cba8db301..6eef3ae80cc 100644
--- a/addons/payment_authorize/models/authorize_request.py
+++ b/addons/payment_authorize/models/authorize_request.py
@@ -150,7 +150,7 @@ class AuthorizeAPI():
etree.SubElement(root, "transId").text = transaction_id
customer = etree.SubElement(root, "customer")
etree.SubElement(customer, "merchantCustomerId").text = 'ODOO-%s-%s' % (partner.id, uuid4().hex[:8])
- etree.SubElement(customer, "email").text = partner.email
+ etree.SubElement(customer, "email").text = partner.email or ''
response = self._authorize_request(root)
res = dict()
res['profile_id'] = response.find('customerProfileId').text
diff --git a/addons/payment_paypal/controllers/main.py b/addons/payment_paypal/controllers/main.py
index bdf35742bec..2fefb1417ef 100644
--- a/addons/payment_paypal/controllers/main.py
+++ b/addons/payment_paypal/controllers/main.py
@@ -32,16 +32,22 @@ class PaypalController(http.Controller):
:param response str: text response, structured in the following way:
STATUS\nkey1=value1\nkey2=value2...\n
+ or STATUS\nError message...\n
:rtype tuple(str, dict)
:return: tuple containing the STATUS str and the key/value pairs
parsed as a dict
"""
lines = filter(None, response.split('\n'))
status = lines.pop(0)
- pdt_post = dict(line.split('=', 1) for line in lines)
- # html unescape
- for post in pdt_post:
- pdt_post[post] = urllib.unquote_plus(pdt_post[post]).decode('utf8')
+
+ pdt_post = {}
+ for line in lines:
+ split = line.split('=', 1)
+ if len(split) == 2:
+ pdt_post[split[0]] = urllib.unquote_plus(split[1]).decode('utf8')
+ else:
+ _logger.warning('Paypal: error processing pdt response: %s', line)
+
return status, pdt_post
def paypal_validate_data(self, **post):
diff --git a/addons/point_of_sale/controllers/main.py b/addons/point_of_sale/controllers/main.py
index 3c110494630..cd8a1e8e493 100644
--- a/addons/point_of_sale/controllers/main.py
+++ b/addons/point_of_sale/controllers/main.py
@@ -14,7 +14,10 @@ class PosController(http.Controller):
@http.route('/pos/web', type='http', auth='user')
def pos_web(self, debug=False, **k):
# if user not logged in, log him in
- pos_sessions = request.env['pos.session'].search([('state', '=', 'opened'), ('user_id', '=', request.session.uid)])
+ pos_sessions = request.env['pos.session'].search([
+ ('state', '=', 'opened'),
+ ('user_id', '=', request.session.uid),
+ ('name', 'not like', '(RESCUE FOR')])
if not pos_sessions:
return werkzeug.utils.redirect('/web#action=point_of_sale.action_client_pos_menu')
pos_sessions.login()
diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py
index 8dbcb4f1793..d1deb839071 100644
--- a/addons/point_of_sale/models/pos_config.py
+++ b/addons/point_of_sale/models/pos_config.py
@@ -31,7 +31,7 @@ class PosConfig(models.Model):
def _default_sale_journal(self):
journal = self.env.ref('point_of_sale.pos_sale_journal', raise_if_not_found=False)
- if journal and journal.company_id == self.env.user.company_id:
+ if journal and journal.sudo().company_id == self.env.user.company_id:
return journal
return self._default_invoice_journal()
@@ -137,9 +137,12 @@ class PosConfig(models.Model):
@api.depends('session_ids')
def _compute_current_session(self):
for pos_config in self:
- session = pos_config.session_ids.filtered(lambda r: r.user_id.id == self.env.uid and not r.state == 'closed')
- pos_config.current_session_id = session
- pos_config.current_session_state = session.state
+ session = pos_config.session_ids.filtered(lambda r: r.user_id.id == self.env.uid and \
+ not r.state == 'closed' and \
+ '(RESCUE FOR' not in r.name)
+ # sessions ordered by id desc
+ pos_config.current_session_id = session and session[0].id or False
+ pos_config.current_session_state = session and session[0].state or False
@api.depends('session_ids')
def _compute_last_session(self):
@@ -159,7 +162,8 @@ class PosConfig(models.Model):
@api.depends('session_ids')
def _compute_current_session_user(self):
for pos_config in self:
- pos_config.pos_session_username = pos_config.session_ids.filtered(lambda s: s.state == 'opened').user_id.name
+ session = pos_config.session_ids.filtered(lambda s: s.state == 'opened' and '(RESCUE FOR' not in s.name)
+ pos_config.pos_session_username = session and session[0].user_id.name or False
@api.constrains('company_id', 'stock_location_id')
def _check_company_location(self):
@@ -207,7 +211,7 @@ class PosConfig(models.Model):
@api.model
def create(self, values):
- IrSequence = self.env['ir.sequence']
+ IrSequence = self.env['ir.sequence'].sudo()
val = {
'name': _('POS Order %s') % values['name'],
'padding': 4,
diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py
index c4db68c0311..1e3a56fb00d 100644
--- a/addons/point_of_sale/models/pos_order.py
+++ b/addons/point_of_sale/models/pos_order.py
@@ -66,11 +66,18 @@ class PosOrder(models.Model):
closed_session.id,
order['name'],
order['amount_total'])
+ rescue_session = PosSession.search([
+ ('name', 'like', '(RESCUE FOR %(session)s)' % {'session': closed_session.name}),
+ ('state', 'not in', ('closed', 'closing_control')),
+ ], limit=1)
+ if rescue_session:
+ _logger.warning('reusing recovery session %s for saving order %s', rescue_session.name, order['name'])
+ return rescue_session
+
_logger.warning('attempting to create recovery session for saving order %s', order['name'])
new_session = PosSession.create({
'config_id': closed_session.config_id.id,
- 'name': _('(RESCUE FOR %(session)s)') % {'session': closed_session.name},
- 'rescue': True, # avoid conflict with live sessions
+ 'name': '(RESCUE FOR %(session)s)' % {'session': closed_session.name},
})
# bypass opening_control (necessary when using cash control)
new_session.action_pos_session_open()
@@ -334,7 +341,12 @@ class PosOrder(models.Model):
name = fields.Char(string='Order Ref', required=True, readonly=True, copy=False, default='/')
company_id = fields.Many2one('res.company', string='Company', required=True, readonly=True, default=lambda self: self.env.user.company_id)
date_order = fields.Datetime(string='Order Date', readonly=True, index=True, default=fields.Datetime.now)
- user_id = fields.Many2one('res.users', string='Salesman', help="Person who uses the cash register. It can be a reliever, a student or an interim employee.", default=lambda self: self.env.uid)
+ user_id = fields.Many2one(
+ comodel_name='res.users', string='Salesman',
+ help="Person who uses the cash register. It can be a reliever, a student or an interim employee.",
+ default=lambda self: self.env.uid,
+ states={'done': [('readonly', True)], 'invoiced': [('readonly', True)]},
+ )
amount_tax = fields.Float(compute='_compute_amount_all', string='Taxes', digits=0)
amount_total = fields.Float(compute='_compute_amount_all', string='Total', digits=0)
amount_paid = fields.Float(compute='_compute_amount_all', string='Paid', states={'draft': [('readonly', False)]}, readonly=True, digits=0)
@@ -359,12 +371,22 @@ class PosOrder(models.Model):
account_move = fields.Many2one('account.move', string='Journal Entry', readonly=True, copy=False)
picking_id = fields.Many2one('stock.picking', string='Picking', readonly=True, copy=False)
picking_type_id = fields.Many2one('stock.picking.type', related='session_id.config_id.picking_type_id', string="Picking Type")
- location_id = fields.Many2one('stock.location', related='session_id.config_id.stock_location_id', string="Location", store=True)
+ location_id = fields.Many2one(
+ comodel_name='stock.location',
+ related='session_id.config_id.stock_location_id',
+ string="Location", store=True,
+ readonly=True,
+ )
note = fields.Text(string='Internal Notes')
nb_print = fields.Integer(string='Number of Print', readonly=True, copy=False, default=0)
pos_reference = fields.Char(string='Receipt Ref', readonly=True, copy=False)
sale_journal = fields.Many2one('account.journal', related='session_id.config_id.journal_id', string='Sales Journal', store=True, readonly=True)
- fiscal_position_id = fields.Many2one('account.fiscal.position', string='Fiscal Position', default=lambda self: self._default_session().config_id.default_fiscal_position_id)
+ fiscal_position_id = fields.Many2one(
+ comodel_name='account.fiscal.position', string='Fiscal Position',
+ default=lambda self: self._default_session().config_id.default_fiscal_position_id,
+ readonly=True,
+ states={'draft': [('readonly', False)]},
+ )
@api.depends('statement_ids', 'lines.price_subtotal_incl', 'lines.discount')
def _compute_amount_all(self):
@@ -540,6 +562,8 @@ class PosOrder(models.Model):
Move = self.env['stock.move']
StockWarehouse = self.env['stock.warehouse']
for order in self:
+ if not order.lines.filtered(lambda l: l.product_id.type in ['product', 'consu']):
+ continue
address = order.partner_id.address_get(['delivery']) or {}
picking_type = order.picking_type_id
return_pick_type = order.picking_type_id.return_picking_type_id or order.picking_type_id
@@ -569,7 +593,7 @@ class PosOrder(models.Model):
'location_id': location_id,
'location_dest_id': destination_id,
}
- pos_qty = any([x.qty >= 0 for x in order.lines])
+ pos_qty = any([x.qty > 0 for x in order.lines])
if pos_qty:
order_picking = Picking.create(picking_vals.copy())
order_picking.message_post(body=message)
@@ -607,8 +631,8 @@ class PosOrder(models.Model):
# when the pos.config has no picking_type_id set only the moves will be created
if moves and not return_picking and not order_picking:
- moves.action_confirm()
- moves.force_assign()
+ moves.action_assign()
+ moves.filtered(lambda m: m.state in ['confirmed', 'waiting']).force_assign()
moves.filtered(lambda m: m.product_id.tracking == 'none').action_done()
return True
@@ -616,7 +640,7 @@ class PosOrder(models.Model):
def _force_picking_done(self, picking):
"""Force picking in order to be set as done."""
self.ensure_one()
- picking.action_confirm()
+ picking.action_assign()
picking.force_assign()
self.set_pack_operation_lot(picking)
if not any([(x.product_id.tracking != 'none') for x in picking.pack_operation_ids]):
diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py
index 4335f1d3f2b..a664e639c3b 100644
--- a/addons/point_of_sale/models/pos_session.py
+++ b/addons/point_of_sale/models/pos_session.py
@@ -128,12 +128,20 @@ class PosSession(models.Model):
@api.constrains('user_id', 'state')
def _check_unicity(self):
# open if there is no session in 'opening_control', 'opened', 'closing_control' for one user
- if self.search_count([('state', 'not in', ('closed', 'closing_control')), ('user_id', '=', self.user_id.id)]) > 1:
+ if self.search_count([
+ ('state', 'not in', ('closed', 'closing_control')),
+ ('user_id', '=', self.user_id.id),
+ ('name', 'not like', 'RESCUE FOR'),
+ ]) > 1:
raise ValidationError(_("You cannot create two active sessions with the same responsible!"))
@api.constrains('config_id')
def _check_pos_config(self):
- if self.search_count([('state', '!=', 'closed'), ('config_id', '=', self.config_id.id)]) > 1:
+ if self.search_count([
+ ('state', '!=', 'closed'),
+ ('config_id', '=', self.config_id.id),
+ ('name', 'not like', 'RESCUE FOR'),
+ ]) > 1:
raise ValidationError(_("You cannot create two active sessions related to the same point of sale!"))
@api.model
diff --git a/addons/point_of_sale/static/src/js/chrome.js b/addons/point_of_sale/static/src/js/chrome.js
index 02d1123bcc3..b9370802dd6 100644
--- a/addons/point_of_sale/static/src/js/chrome.js
+++ b/addons/point_of_sale/static/src/js/chrome.js
@@ -11,6 +11,7 @@ var CrashManager = require('web.CrashManager');
var _t = core._t;
+var _lt = core._lt;
var QWeb = core.qweb;
/* -------- The Order Selector -------- */
@@ -704,7 +705,7 @@ var Chrome = PosBaseWidget.extend({
'widget': HeaderButtonWidget,
'append': '.pos-rightheader',
'args': {
- label: _t('Close'),
+ label: _lt('Close'),
action: function(){
var self = this;
if (!this.confirmed) {
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index 80ea86b9be9..4cb1cc08296 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -1318,7 +1318,9 @@ exports.Orderline = Backbone.Model.extend({
this.trigger('change',this);
},
get_unit_price: function(){
- return round_di(this.price || 0, this.pos.dp['Product Price'])
+ var digits = this.pos.dp['Product Price'];
+ // round and truncate to mimic _sybmbol_set behavior
+ return parseFloat(round_di(this.price || 0, digits).toFixed(digits));
},
get_unit_display_price: function(){
if (this.pos.config.iface_tax_included) {
diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js
index 5b8933c4cc7..8c4efac4d0e 100644
--- a/addons/point_of_sale/static/src/js/screens.js
+++ b/addons/point_of_sale/static/src/js/screens.js
@@ -1355,6 +1355,16 @@ var ClientListScreenWidget = ScreenWidget.extend({
contents.append($(QWeb.render('ClientDetailsEdit',{widget:this,partner:partner})));
this.toggle_save_button();
+ // Browsers attempt to scroll invisible input elements
+ // into view (eg. when hidden behind keyboard). They don't
+ // seem to take into account that some elements are not
+ // scrollable.
+ contents.find('input').blur(function() {
+ setTimeout(function() {
+ self.$('.window').scrollTop(0);
+ }, 0);
+ });
+
contents.find('.image-uploader').on('change',function(event){
self.load_image_file(event.target.files[0],function(res){
if (res) {
@@ -1404,7 +1414,9 @@ var ReceiptScreenWidget = ScreenWidget.extend({
this.render_change();
this.render_receipt();
-
+ this.handle_auto_print();
+ },
+ handle_auto_print: function() {
if (this.should_auto_print()) {
this.print();
if (this.should_close_immediately()){
@@ -1413,7 +1425,6 @@ var ReceiptScreenWidget = ScreenWidget.extend({
} else {
this.lock_screen(false);
}
-
},
should_auto_print: function() {
return this.pos.config.iface_print_auto && !this.pos.get_order()._printed;
diff --git a/addons/point_of_sale/tests/common.py b/addons/point_of_sale/tests/common.py
index ebf971d2ec3..4c5597979c6 100644
--- a/addons/point_of_sale/tests/common.py
+++ b/addons/point_of_sale/tests/common.py
@@ -10,12 +10,16 @@ class TestPointOfSaleCommon(common.TransactionCase):
self.AccountBankStatementLine = self.env['account.bank.statement.line']
self.PosMakePayment = self.env['pos.make.payment']
self.PosOrder = self.env['pos.order']
+ self.PosSession = self.env['pos.session']
self.company_id = self.ref('base.main_company')
self.product3 = self.env.ref('product.product_product_3')
self.product4 = self.env.ref('product.product_product_4')
self.partner1 = self.env.ref('base.res_partner_1')
self.partner4 = self.env.ref('base.res_partner_4')
self.pos_config = self.env.ref('point_of_sale.pos_config_main')
+ self.carotte = self.env.ref('point_of_sale.carotte')
+ self.courgette = self.env.ref('point_of_sale.courgette')
+ self.onions = self.env.ref('point_of_sale.Onions')
# create a new session
self.pos_order_session0 = self.env['pos.session'].create({
diff --git a/addons/point_of_sale/tests/test_point_of_sale_flow.py b/addons/point_of_sale/tests/test_point_of_sale_flow.py
index 51e0bf5a69b..a22f5addc55 100644
--- a/addons/point_of_sale/tests/test_point_of_sale_flow.py
+++ b/addons/point_of_sale/tests/test_point_of_sale_flow.py
@@ -4,8 +4,8 @@ import time
import os
import odoo
-from odoo import tools, report as odoo_report
-from odoo.tools import float_compare, test_reports
+from odoo import fields, tools, report as odoo_report
+from odoo.tools import float_compare, mute_logger, test_reports
from odoo.addons.point_of_sale.tests.common import TestPointOfSaleCommon
@@ -411,3 +411,138 @@ class TestPointOfSaleFlow(TestPointOfSaleCommon):
# I confirm the bank statement using Confirm button
self.AccountBankStatement.button_confirm_bank()
+
+ def test_create_from_ui(self):
+ """
+ Simulation of sales coming from the interface, even after closing the session
+ """
+ # I click on create a new session button
+ self.pos_config.open_session_cb()
+
+ current_session = self.pos_config.current_session_id
+ num_starting_orders = len(current_session.order_ids)
+
+ carrot_order = {'data':
+ {'amount_paid': 0.9,
+ 'amount_return': 0,
+ 'amount_tax': 0,
+ 'amount_total': 0.9,
+ 'creation_date': fields.Datetime.now(),
+ 'fiscal_position_id': False,
+ 'lines': [[0,
+ 0,
+ {'discount': 0,
+ 'id': 42,
+ 'pack_lot_ids': [],
+ 'price_unit': 0.9,
+ 'product_id': self.carotte.id,
+ 'qty': 1,
+ 'tax_ids': []}]],
+ 'name': 'Order 00042-003-0014',
+ 'partner_id': False,
+ 'pos_session_id': current_session.id,
+ 'sequence_number': 2,
+ 'statement_ids': [[0,
+ 0,
+ {'account_id': self.env.user.partner_id.property_account_receivable_id.id,
+ 'amount': 0.9,
+ 'journal_id': self.pos_config.journal_ids[0].id,
+ 'name': fields.Datetime.now(),
+ 'statement_id': current_session.statement_ids[0].id}]],
+ 'uid': '00042-003-0014',
+ 'user_id': self.env.uid},
+ 'id': '00042-003-0014',
+ 'to_invoice': False}
+
+ zucchini_order = {'data':
+ {'amount_paid': 1.2,
+ 'amount_return': 0,
+ 'amount_tax': 0,
+ 'amount_total': 1.1,
+ 'creation_date': fields.Datetime.now(),
+ 'fiscal_position_id': False,
+ 'lines': [[0,
+ 0,
+ {'discount': 0,
+ 'id': 3,
+ 'pack_lot_ids': [],
+ 'price_unit': 1.2,
+ 'product_id': self.courgette.id,
+ 'qty': 1,
+ 'tax_ids': []}]],
+ 'name': 'Order 00043-003-0014',
+ 'partner_id': False,
+ 'pos_session_id': current_session.id,
+ 'sequence_number': self.pos_config.journal_id.id,
+ 'statement_ids': [[0,
+ 0,
+ {'account_id': self.env.user.partner_id.property_account_receivable_id.id,
+ 'amount': 1.2,
+ 'journal_id': self.pos_config.journal_ids[0].id,
+ 'name': fields.Datetime.now(),
+ 'statement_id': current_session.statement_ids[0].id}]],
+ 'uid': '00043-003-0014',
+ 'user_id': self.env.uid},
+ 'id': '00043-003-0014',
+ 'to_invoice': False}
+
+ onions_order = {'data':
+ {'amount_paid': 1.28,
+ 'amount_return': 0,
+ 'amount_tax': 0,
+ 'amount_total': 1.28,
+ 'creation_date': fields.Datetime.now(),
+ 'fiscal_position_id': False,
+ 'lines': [[0,
+ 0,
+ {'discount': 0,
+ 'id': 3,
+ 'pack_lot_ids': [],
+ 'price_unit': 1.28,
+ 'product_id': self.onions.id,
+ 'qty': 1,
+ 'tax_ids': [[6, False, self.onions.taxes_id.ids]]}]],
+ 'name': 'Order 00044-003-0014',
+ 'partner_id': False,
+ 'pos_session_id': current_session.id,
+ 'sequence_number': self.pos_config.journal_id.id,
+ 'statement_ids': [[0,
+ 0,
+ {'account_id': self.env.user.partner_id.property_account_receivable_id.id,
+ 'amount': 1.28,
+ 'journal_id': self.pos_config.journal_ids[0].id,
+ 'name': fields.Datetime.now(),
+ 'statement_id': current_session.statement_ids[0].id}]],
+ 'uid': '00044-003-0014',
+ 'user_id': self.env.uid},
+ 'id': '00044-003-0014',
+ 'to_invoice': False}
+
+
+ # I create an order on an open session
+ self.PosOrder.create_from_ui([carrot_order])
+ self.assertEqual(num_starting_orders + 1, len(current_session.order_ids), "Submitted order not encoded")
+
+ # I resubmit the same order
+ self.PosOrder.create_from_ui([carrot_order])
+ self.assertEqual(num_starting_orders + 1, len(current_session.order_ids), "Resubmitted order was not skipped")
+
+ # I close the session
+ current_session.action_pos_session_closing_control()
+ self.assertEqual(current_session.state, 'closed', "Session was not properly closed")
+ self.assertFalse(self.pos_config.current_session_id, "Current session not properly recomputed")
+
+ # I keep selling after the session is closed
+ with mute_logger('odoo.addons.point_of_sale.models.pos_order'):
+ self.PosOrder.create_from_ui([zucchini_order, onions_order])
+ rescue_session = self.PosSession.search([
+ ('config_id', '=', self.pos_config.id),
+ ('state', '=', 'opened'),
+ ])
+ self.assertEqual(len(rescue_session), 1, "One (and only one) rescue session should be created for orphan orders")
+ self.assertIn("(RESCUE FOR %s)" % current_session.name, rescue_session.name, "Rescue session is not linked to the previous one")
+ self.assertEqual(len(rescue_session.order_ids), 2, "Rescue session does not contain both orders")
+
+ # I close the rescue session
+ rescue_session.action_pos_session_closing_control()
+ self.assertEqual(rescue_session.state, 'closed', "Rescue session was not properly closed")
diff --git a/addons/point_of_sale/views/pos_session_view.xml b/addons/point_of_sale/views/pos_session_view.xml
index 1a377c34db8..052a9c9a822 100644
--- a/addons/point_of_sale/views/pos_session_view.xml
+++ b/addons/point_of_sale/views/pos_session_view.xml
@@ -157,7 +157,7 @@
<field name="user_id" />
<group expand="0" string="Group By">
<filter string="User" domain="[]" context="{'group_by' : 'user_id'}" />
- <filter string="Point of Sale" domain="[]" context="{'group_by': 'user_id'}" />
+ <filter string="Point of Sale" domain="[]" context="{'group_by': 'config_id'}" />
</group>
</search>
</field>
diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py
index 006a24889d7..afe89d3cebd 100644
--- a/addons/purchase/models/purchase.py
+++ b/addons/purchase/models/purchase.py
@@ -550,13 +550,34 @@ class PurchaseOrderLine(models.Model):
line = super(PurchaseOrderLine, self).create(values)
if line.order_id.state == 'purchase':
line.order_id._create_picking()
+ msg = _("Extra line with %s ") % (line.product_id.display_name,)
+ line.order_id.message_post(body=msg)
return line
@api.multi
def write(self, values):
+ orders = False
+ if 'product_qty' in values:
+ changed_lines = self.filtered(lambda x: x.order_id.state == 'purchase')
+ if changed_lines:
+ orders = changed_lines.mapped('order_id')
+ for order in orders:
+ order_lines = changed_lines.filtered(lambda x: x.order_id == order)
+ msg = ""
+ if any([values['product_qty'] < x.product_qty for x in order_lines]):
+ msg += "<b>" + _('The ordered quantity has been decreased. Do not forget to take it into account on your bills and receipts.') + '</b><br/>'
+ msg += "<ul>"
+ for line in order_lines:
+ msg += "<li> %s:" % (line.product_id.display_name,)
+ msg += "<br/>" + _("Ordered Quantity") + ": %s -> %s <br/>" % (line.product_qty, float(values['product_qty']),)
+ if line.product_id.type in ('product', 'consu'):
+ msg += _("Received Quantity") + ": %s <br/>" % (line.qty_received,)
+ msg += _("Billed Quantity") + ": %s <br/></li>" % (line.qty_invoiced,)
+ msg += "</ul>"
+ order.message_post(body=msg)
result = super(PurchaseOrderLine, self).write(values)
- orders = self.filtered(lambda x: x.order_id.state == 'purchase').mapped('order_id')
- orders._create_picking()
+ if orders:
+ orders._create_picking()
return result
name = fields.Text(string='Description', required=True)
@@ -950,6 +971,12 @@ class ProcurementOrder(models.Model):
'group_id': group
}
+ def _make_po_select_supplier(self, suppliers):
+ """ Method intended to be overridden by customized modules to implement any logic in the
+ selection of supplier.
+ """
+ return suppliers[0]
+
@api.multi
def make_po(self):
cache = {}
@@ -959,7 +986,7 @@ class ProcurementOrder(models.Model):
if not suppliers:
procurement.message_post(body=_('No vendor associated to product %s. Please set one to fix this procurement.') % (procurement.product_id.name))
continue
- supplier = suppliers[0]
+ supplier = procurement._make_po_select_supplier(suppliers)
partner = supplier.name
gpo = procurement.rule_id.group_propagation_option
diff --git a/addons/report/models/report.py b/addons/report/models/report.py
index e057578a0cc..28e6467aee2 100644
--- a/addons/report/models/report.py
+++ b/addons/report/models/report.py
@@ -461,8 +461,11 @@ class Report(models.Model):
out, err = process.communicate()
if process.returncode not in [0, 1]:
- raise UserError(_('Wkhtmltopdf failed (error code: %s). '
- 'Message: %s') % (str(process.returncode), err))
+ if process.returncode == -11:
+ message = _('Wkhtmltopdf failed (error code: %s). Memory limit too low or maximum file number of subprocess reached. Message : %s')
+ else:
+ message = _('Wkhtmltopdf failed (error code: %s). Message: %s')
+ raise UserError(message % (str(process.returncode), err[-1000:]))
# Save the pdf in attachment if marked
if reporthtml[0] is not False and save_in_attachment.get(reporthtml[0]):
diff --git a/addons/sale/models/account_invoice.py b/addons/sale/models/account_invoice.py
index a389b5f9691..713308aa7a1 100644
--- a/addons/sale/models/account_invoice.py
+++ b/addons/sale/models/account_invoice.py
@@ -84,6 +84,10 @@ class AccountInvoice(models.Model):
return report_pages
+ @api.multi
+ def get_delivery_partner_id(self):
+ self.ensure_one()
+ return self.partner_shipping_id.id or super(AccountInvoice, self).get_delivery_partner_id()
class AccountInvoiceLine(models.Model):
_inherit = 'account.invoice.line'
diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py
index 2e0d017c8c2..d8d03f5ef1e 100644
--- a/addons/sale/models/sale.py
+++ b/addons/sale/models/sale.py
@@ -61,7 +61,9 @@ class SaleOrder(models.Model):
for inv in invoice_ids:
refund_ids += refund_ids.search([('type', '=', 'out_refund'), ('origin', '=', inv.number), ('origin', '!=', False), ('journal_id', '=', inv.journal_id.id)])
- line_invoice_status = [line.invoice_status for line in order.order_line]
+ # Ignore the status of the deposit product
+ deposit_product_id = self.env['sale.advance.payment.inv']._default_product_id()
+ line_invoice_status = [line.invoice_status for line in order.order_line if line.product_id != deposit_product_id]
if order.state not in ('sale', 'done'):
invoice_status = 'no'
@@ -507,11 +509,11 @@ class SaleOrder(models.Model):
group = tax.tax_group_id
res.setdefault(group, 0.0)
amount = tax.compute_all(line.price_reduce + base_tax, quantity=line.product_uom_qty,
- product=line.product_id, partner=line.order_partner_id)['taxes'][0]['amount']
+ product=line.product_id, partner=self.partner_shipping_id)['taxes'][0]['amount']
res[group] += amount
if tax.include_base_amount:
base_tax += tax.compute_all(line.price_reduce + base_tax, quantity=1, product=line.product_id,
- partner=line.order_partner_id)['taxes'][0]['amount']
+ partner=self.partner_shipping_id)['taxes'][0]['amount']
res = sorted(res.items(), key=lambda l: l[0].sequence)
res = map(lambda l: (l[0].name, l[1]), res)
return res
@@ -558,7 +560,7 @@ class SaleOrderLine(models.Model):
"""
for line in self:
price = line.price_unit * (1 - (line.discount or 0.0) / 100.0)
- taxes = line.tax_id.compute_all(price, line.order_id.currency_id, line.product_uom_qty, product=line.product_id, partner=line.order_id.partner_id)
+ taxes = line.tax_id.compute_all(price, line.order_id.currency_id, line.product_uom_qty, product=line.product_id, partner=line.order_id.partner_shipping_id)
line.update({
'price_tax': sum(t.get('amount', 0.0) for t in taxes.get('taxes', [])),
'price_total': taxes['total_included'],
@@ -624,7 +626,7 @@ class SaleOrderLine(models.Model):
fpos = line.order_id.fiscal_position_id or line.order_id.partner_id.property_account_position_id
# If company_id is set, always filter taxes by the company
taxes = line.product_id.taxes_id.filtered(lambda r: not line.company_id or r.company_id == line.company_id)
- line.tax_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_id) if fpos else taxes
+ line.tax_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_shipping_id) if fpos else taxes
@api.multi
def _prepare_order_line_procurement(self, group_id=False):
@@ -688,16 +690,37 @@ class SaleOrderLine(models.Model):
line = super(SaleOrderLine, self).create(values)
if line.state == 'sale':
line._action_procurement_create()
+ msg = _("Extra line with %s ") % (line.product_id.display_name,)
+ line.order_id.message_post(body=msg)
return line
@api.multi
def write(self, values):
lines = False
+ changed_lines = False
if 'product_uom_qty' in values:
precision = self.env['decimal.precision'].precision_get('Product Unit of Measure')
lines = self.filtered(
lambda r: r.state == 'sale' and float_compare(r.product_uom_qty, values['product_uom_qty'], precision_digits=precision) == -1)
+ changed_lines = self.filtered(
+ lambda r: r.state == 'sale' and float_compare(r.product_uom_qty, values['product_uom_qty'], precision_digits=precision) != 0)
+ if changed_lines:
+ orders = self.mapped('order_id')
+ for order in orders:
+ order_lines = changed_lines.filtered(lambda x: x.order_id == order)
+ msg = ""
+ if any([values['product_uom_qty'] < x.product_uom_qty for x in order_lines]):
+ msg += "<b>" + _('The ordered quantity has been decreased. Do not forget to take it into account on your invoices and delivery orders.') + '</b>'
+ msg += "<ul>"
+ for line in order_lines:
+ msg += "<li> %s:" % (line.product_id.display_name,)
+ msg += "<br/>" + _("Ordered Quantity") + ": %s -> %s <br/>" % (line.product_uom_qty, float(values['product_uom_qty']),)
+ if line.product_id.type in ('consu', 'product'):
+ msg += _("Delivered Quantity") + ": %s <br/>" % (line.qty_delivered,)
+ msg += _("Invoiced Quantity") + ": %s <br/>" % (line.qty_invoiced,)
+ msg += "</ul>"
+ order.message_post(body=msg)
result = super(SaleOrderLine, self).write(values)
if lines:
lines._action_procurement_create()
@@ -821,10 +844,16 @@ class SaleOrderLine(models.Model):
@api.multi
def _get_display_price(self, product):
# TO DO: move me in master/saas-16 on sale.order
- if self.order_id.pricelist_id.discount_policy == 'without_discount':
+ if self.order_id.pricelist_id.discount_policy == 'with_discount':
+ return product.with_context(pricelist=self.order_id.pricelist_id.id).price
+ price, rule_id = self.order_id.pricelist_id.get_product_price_rule(self.product_id, self.product_uom_qty or 1.0, self.order_id.partner_id)
+ pricelist_item = self.env['product.pricelist.item'].browse(rule_id)
+ if (pricelist_item.base == 'pricelist' and pricelist_item.base_pricelist_id.discount_policy == 'with_discount'):
+ price, rule_id = pricelist_item.base_pricelist_id.get_product_price_rule(self.product_id, self.product_uom_qty or 1.0, self.order_id.partner_id)
+ return price
+ else:
from_currency = self.order_id.company_id.currency_id
return from_currency.compute(product.lst_price, self.order_id.pricelist_id.currency_id)
- return product.with_context(pricelist=self.order_id.pricelist_id.id).price
@api.multi
@api.onchange('product_id')
@@ -964,7 +993,7 @@ class SaleOrderLine(models.Model):
new_list_price, currency_id = self.with_context(context_partner)._get_real_price_currency(self.product_id, rule_id, self.product_uom_qty, self.product_uom, self.order_id.pricelist_id.id)
new_list_price = self.env['account.tax']._fix_tax_included_price(new_list_price, self.product_id.taxes_id, self.tax_id)
- if price != 0 and new_list_price != 0:
+ if new_list_price != 0:
if self.product_id.company_id and self.order_id.pricelist_id.currency_id != self.product_id.company_id.currency_id:
# new_list_price is in company's currency while price in pricelist currency
new_list_price = self.env['res.currency'].browse(currency_id).with_context(context_partner).compute(new_list_price, self.order_id.pricelist_id.currency_id)
diff --git a/addons/sale/models/sale_analytic.py b/addons/sale/models/sale_analytic.py
index acf3fd48682..e937292d818 100644
--- a/addons/sale/models/sale_analytic.py
+++ b/addons/sale/models/sale_analytic.py
@@ -12,7 +12,19 @@ class SaleOrderLine(models.Model):
lines = {}
if not domain:
# To filter on analyic lines linked to an expense
- domain = [('so_line', 'in', self.ids), ('amount', '<=', 0.0)]
+ expense_type_id = self.env.ref('account.data_account_type_expenses', raise_if_not_found=False)
+ expense_type_id = expense_type_id and expense_type_id.id
+ domain = [
+ ('so_line', 'in', self.ids),
+ '|',
+ ('amount', '<', 0),
+ '&',
+ ('amount', '=', 0),
+ '|',
+ ('move_id', '=', False),
+ ('move_id.account_id.user_type_id', '=', expense_type_id)
+ ]
+
data = self.env['account.analytic.line'].read_group(
domain,
['so_line', 'unit_amount', 'product_uom_id'], ['product_uom_id', 'so_line'], lazy=False
diff --git a/addons/sale_timesheet/models/sale_order.py b/addons/sale_timesheet/models/sale_order.py
index 4e5eee48591..0254c3dbe0e 100644
--- a/addons/sale_timesheet/models/sale_order.py
+++ b/addons/sale_timesheet/models/sale_order.py
@@ -142,5 +142,18 @@ class SaleOrderLine(models.Model):
def _compute_analytic(self, domain=None):
if not domain:
# To filter on analyic lines linked to an expense
- domain = [('so_line', 'in', self.ids), '|', ('amount', '<=', 0.0), ('project_id', '!=', False)]
+ expense_type_id = self.env.ref('account.data_account_type_expenses', raise_if_not_found=False)
+ expense_type_id = expense_type_id and expense_type_id.id
+ domain = [
+ ('so_line', 'in', self.ids),
+ '|',
+ '|',
+ ('amount', '<', 0.0),
+ ('project_id', '!=', False),
+ '&',
+ ('amount', '=', 0),
+ '|',
+ ('move_id', '=', False),
+ ('move_id.account_id.user_type_id', '=', expense_type_id)
+ ]
return super(SaleOrderLine, self)._compute_analytic(domain=domain)
diff --git a/addons/sales_team/data/sales_team_data.xml b/addons/sales_team/data/sales_team_data.xml
index 4f2397c5731..2af8a2f7992 100644
--- a/addons/sales_team/data/sales_team_data.xml
+++ b/addons/sales_team/data/sales_team_data.xml
@@ -4,10 +4,12 @@
<record id="team_sales_department" model="crm.team">
<field name="name">Sales</field>
<field name="member_ids" eval="[(4, ref('base.user_root'))]"/>
+ <field name="company_id" eval="False"/>
</record>
<record id="salesteam_website_sales" model="crm.team">
<field name="name">Website</field>
+ <field name="company_id" eval="False"/>
<field name="active" eval="False"/>
<field name="team_type" eval="'website'"/>
</record>
diff --git a/addons/sales_team/models/crm_team.py b/addons/sales_team/models/crm_team.py
index a05520d422b..c4cb8b74301 100644
--- a/addons/sales_team/models/crm_team.py
+++ b/addons/sales_team/models/crm_team.py
@@ -24,9 +24,11 @@ class CrmTeam(models.Model):
def _get_default_team_id(self, user_id=None):
if not user_id:
user_id = self.env.uid
- team_id = self.env['crm.team'].sudo().search(
- ['|', ('user_id', '=', user_id), ('member_ids', '=', user_id)],
- limit=1)
+ company_id = self.sudo(user_id).company_id.id
+ team_id = self.env['crm.team'].sudo().search([
+ '|', ('user_id', '=', user_id), ('member_ids', '=', user_id),
+ '|', ('company_id', '=', False), ('company_id', 'child_of', [company_id])
+ ], limit=1)
if not team_id and 'default_team_id' in self.env.context:
team_id = self.env['crm.team'].browse(self.env.context.get('default_team_id'))
if not team_id:
diff --git a/addons/stock/models/procurement.py b/addons/stock/models/procurement.py
index 87f2af00d8e..b49bd54c48b 100644
--- a/addons/stock/models/procurement.py
+++ b/addons/stock/models/procurement.py
@@ -277,23 +277,27 @@ class ProcurementOrder(models.Model):
@api.model
def _procure_orderpoint_confirm(self, use_new_cursor=False, company_id=False):
""" Create procurements based on orderpoints.
- :param bool use_new_cursor: if set, use a dedicated cursor and auto-commit after processing each procurement.
+ :param bool use_new_cursor: if set, use a dedicated cursor and auto-commit after processing
+ 1000 orderpoints.
This is appropriate for batch jobs only.
"""
- if use_new_cursor:
- cr = registry(self._cr.dbname).cursor()
- self = self.with_env(self.env(cr=cr))
OrderPoint = self.env['stock.warehouse.orderpoint']
- Procurement = self.env['procurement.order']
- ProcurementAutorundefer = Procurement.with_context(procurement_autorun_defer=True)
- procurement_list = []
- orderpoints_noprefetch = OrderPoint.with_context(prefetch_fields=False).search(
- company_id and [('company_id', '=', company_id)] or [],
- order=self._procurement_from_orderpoint_get_order())
+ domain = [('company_id', '=', company_id)] if company_id else []
+ domain += [('product_id.active', '=', True)]
+ orderpoints_noprefetch = OrderPoint.with_context(prefetch_fields=False).search(domain,
+ order=self._procurement_from_orderpoint_get_order()).ids
while orderpoints_noprefetch:
- orderpoints = OrderPoint.browse(orderpoints_noprefetch[:1000].ids)
+ if use_new_cursor:
+ cr = registry(self._cr.dbname).cursor()
+ self = self.with_env(self.env(cr=cr))
+ OrderPoint = self.env['stock.warehouse.orderpoint']
+ Procurement = self.env['procurement.order']
+ ProcurementAutorundefer = Procurement.with_context(procurement_autorun_defer=True)
+ procurement_list = []
+
+ orderpoints = OrderPoint.browse(orderpoints_noprefetch[:1000])
orderpoints_noprefetch = orderpoints_noprefetch[1000:]
# Calculate groups that can be executed together
@@ -343,7 +347,7 @@ class ProcurementOrder(models.Model):
except OperationalError:
if use_new_cursor:
- orderpoints_noprefetch += orderpoint.id
+ orderpoints_noprefetch += [orderpoint.id]
cr.rollback()
continue
else:
@@ -367,8 +371,6 @@ class ProcurementOrder(models.Model):
if use_new_cursor:
cr.commit()
+ cr.close()
- if use_new_cursor:
- cr.commit()
- cr.close()
return {}
diff --git a/addons/stock/models/stock_move.py b/addons/stock/models/stock_move.py
index 0978adaec8a..c9a50f3f704 100644
--- a/addons/stock/models/stock_move.py
+++ b/addons/stock/models/stock_move.py
@@ -349,7 +349,7 @@ class StockMove(models.Model):
raise UserError(_('Cannot unreserve a done move'))
self.quants_unreserve()
if not self.env.context.get('no_state_change'):
- waiting = self.filtered(lambda move: move.get_ancestors())
+ waiting = self.filtered(lambda move: move.procure_method == 'make_to_order' or move.get_ancestors())
waiting.write({'state': 'waiting'})
(self - waiting).write({'state': 'confirmed'})
@@ -411,15 +411,8 @@ class StockMove(models.Model):
type (moves should already have them identical). Otherwise, create a new
picking to assign them to. """
Picking = self.env['stock.picking']
-
- # If this method is called in batch by a write on a one2many and
- # at some point had to create a picking, some next iterations could
- # try to find back the created picking. As we look for it by searching
- # on some computed fields, we have to force a recompute, else the
- # record won't be found.
- self.recompute()
-
for move in self:
+ recompute = False
picking = Picking.search([
('group_id', '=', move.group_id.id),
('location_id', '=', move.location_id.id),
@@ -428,8 +421,17 @@ class StockMove(models.Model):
('printed', '=', False),
('state', 'in', ['draft', 'confirmed', 'waiting', 'partially_available', 'assigned'])], limit=1)
if not picking:
+ recompute = True
picking = Picking.create(move._get_new_picking_values())
move.write({'picking_id': picking.id})
+
+ # If this method is called in batch by a write on a one2many and
+ # at some point had to create a picking, some next iterations could
+ # try to find back the created picking. As we look for it by searching
+ # on some computed fields, we have to force a recompute, else the
+ # record won't be found.
+ if recompute:
+ move.recompute()
return True
_picking_assign = assign_picking
@@ -690,7 +692,7 @@ class StockMove(models.Model):
if len(reserved_quant_ids) == 0 and move.partially_available:
vals['partially_available'] = False
if move.state == 'assigned':
- if move.find_move_ancestors():
+ if move.procure_method == 'make_to_order' or move.find_move_ancestors():
vals['state'] = 'waiting'
else:
vals['state'] = 'confirmed'
diff --git a/addons/stock/report/report_deliveryslip.xml b/addons/stock/report/report_deliveryslip.xml
index c36ba994f7d..014869345c2 100644
--- a/addons/stock/report/report_deliveryslip.xml
+++ b/addons/stock/report/report_deliveryslip.xml
@@ -19,6 +19,9 @@
<div t-field="o.partner_id"
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True}'/>
</div>
+ <div t-if="not (o.move_lines and o.move_lines[0].partner_id) and o.partner_id" name="partner_header">
+ t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true}'/>
+ </div>
</div>
</div>
<h2>
diff --git a/addons/stock/tests/test_stock_flow.py b/addons/stock/tests/test_stock_flow.py
index 3ee20467a88..32f77c06267 100644
--- a/addons/stock/tests/test_stock_flow.py
+++ b/addons/stock/tests/test_stock_flow.py
@@ -1726,4 +1726,69 @@ class TestStockFlow(TestStockCommon):
# force assign on the delivery order, it should be assigned
picking_out.force_assign()
- self.assertEquals(picking_out.state, "assigned") \ No newline at end of file
+ self.assertEquals(picking_out.state, "assigned")
+
+ def test_74_move_state_waiting_mto(self):
+ """ This test will check that when a move is unreserved, it state change to 'waiting' if
+ it has ancestors or is has a 'procure_method' equal to 'make_to_order' else the state
+ changes to 'confirmed'.
+ """
+ picking_out = self.PickingObj.create({
+ 'partner_id': self.partner_agrolite_id,
+ 'picking_type_id': self.picking_type_out,
+ 'location_id': self.stock_location,
+ 'location_dest_id': self.customer_location})
+ move_mto_alone = self.MoveObj.create({
+ 'name': self.productA.name,
+ 'product_id': self.productA.id,
+ 'product_uom_qty': 2,
+ 'product_uom': self.productA.uom_id.id,
+ 'picking_id': picking_out.id,
+ 'location_id': self.stock_location,
+ 'location_dest_id': self.customer_location,
+ 'procure_method':'make_to_order'})
+ move_with_ancestors = self.MoveObj.create({
+ 'name': self.productA.name,
+ 'product_id': self.productA.id,
+ 'product_uom_qty': 2,
+ 'product_uom': self.productA.uom_id.id,
+ 'picking_id': picking_out.id,
+ 'location_id': self.stock_location,
+ 'location_dest_id': self.customer_location})
+ the_ancestor = self.MoveObj.create({
+ 'name': self.productA.name,
+ 'product_id': self.productA.id,
+ 'product_uom_qty': 2,
+ 'product_uom': self.productA.uom_id.id,
+ 'picking_id': picking_out.id,
+ 'location_id': self.stock_location,
+ 'location_dest_id': self.customer_location,
+ 'move_dest_id': move_with_ancestors.id})
+ other_move = self.MoveObj.create({
+ 'name': self.productA.name,
+ 'product_id': self.productA.id,
+ 'product_uom_qty': 2,
+ 'product_uom': self.productA.uom_id.id,
+ 'picking_id': picking_out.id,
+ 'location_id': self.stock_location,
+ 'location_dest_id': self.customer_location})
+
+ move_mto_alone.action_confirm()
+ move_with_ancestors.action_confirm()
+ other_move.action_confirm()
+
+ move_mto_alone.do_unreserve()
+ move_with_ancestors.do_unreserve()
+ other_move.do_unreserve()
+
+ self.assertEquals(move_mto_alone.state, "waiting")
+ self.assertEquals(move_with_ancestors.state, "waiting")
+ self.assertEquals(other_move.state, "confirmed")
+
+ move_mto_alone.recalculate_move_state()
+ move_with_ancestors.recalculate_move_state()
+ other_move.recalculate_move_state()
+
+ self.assertEquals(move_mto_alone.state, "waiting")
+ self.assertEquals(move_with_ancestors.state, "waiting")
+ self.assertEquals(other_move.state, "confirmed")
diff --git a/addons/stock/views/stock_warehouse_views.xml b/addons/stock/views/stock_warehouse_views.xml
index 62d1e3d748c..7a8caea9e5a 100644
--- a/addons/stock/views/stock_warehouse_views.xml
+++ b/addons/stock/views/stock_warehouse_views.xml
@@ -98,6 +98,7 @@
<field name="model">stock.warehouse</field>
<field name="arch" type="xml">
<search string="Warehouse">
+ <field name="name"/>
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
</search>
</field>
diff --git a/addons/stock_account/models/stock.py b/addons/stock_account/models/stock.py
index 4706bbc6b45..9fec58c20ab 100644
--- a/addons/stock_account/models/stock.py
+++ b/addons/stock_account/models/stock.py
@@ -188,7 +188,7 @@ class StockMove(models.Model):
tmpl_dict = defaultdict(lambda: 0.0)
# adapt standard price on incomming moves if the product cost_method is 'average'
std_price_update = {}
- for move in self.filtered(lambda move: move.location_id.usage == 'supplier' and move.product_id.cost_method == 'average'):
+ for move in self.filtered(lambda move: move.location_id.usage in ('supplier', 'production') and move.product_id.cost_method == 'average'):
product_tot_qty_available = move.product_id.qty_available + tmpl_dict[move.product_id.id]
# if the incoming move is for a purchase order with foreign currency, need to call this to get the same value that the quant will use.
diff --git a/addons/stock_landed_costs/models/stock_landed_cost.py b/addons/stock_landed_costs/models/stock_landed_cost.py
index 2427a8ca0ca..12134cc0f0f 100644
--- a/addons/stock_landed_costs/models/stock_landed_cost.py
+++ b/addons/stock_landed_costs/models/stock_landed_cost.py
@@ -129,6 +129,7 @@ class LandedCost(models.Model):
if quant.location_id.usage != 'internal':
qty_out += quant.qty
line._create_accounting_entries(move, qty_out)
+ move.assert_balanced()
cost.write({'state': 'done', 'account_move_id': move.id})
move.post()
return True
@@ -326,7 +327,7 @@ class AdjustmentLines(models.Model):
Generate the account.move.line values to track the landed cost.
Afterwards, for the goods that are already out of stock, we should create the out moves
"""
- AccountMoveLine = self.env['account.move.line'].with_context(check_move_validity=False)
+ AccountMoveLine = self.env['account.move.line'].with_context(check_move_validity=False, recompute=False)
base_line = {
'name': self.name,
@@ -389,5 +390,4 @@ class AdjustmentLines(models.Model):
AccountMoveLine.create(debit_line)
AccountMoveLine.create(credit_line)
- move.assert_balanced()
return True
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index cf6c8be5302..ed3e34762e5 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -651,6 +651,8 @@ class Database(http.Controller):
@http.route('/web/database/create', type='http', auth="none", methods=['POST'], csrf=False)
def create(self, master_pwd, name, lang, password, **post):
try:
+ if not re.match('^[a-zA-Z][a-zA-Z0-9_]+$', name):
+ raise Exception(_('Invalid database name. Only alphanumerical characters and underscore are allowed.'))
# country code could be = "False" which is actually True in python
country_code = post.get('country_code') or False
dispatch_rpc('db', 'create_database', [master_pwd, name, bool(post.get('demo')), lang, password, post['login'], country_code])
@@ -663,6 +665,8 @@ class Database(http.Controller):
@http.route('/web/database/duplicate', type='http', auth="none", methods=['POST'], csrf=False)
def duplicate(self, master_pwd, name, new_name):
try:
+ if not re.match('^[a-zA-Z][a-zA-Z0-9_]+$', new_name):
+ raise Exception(_('Invalid database name. Only alphanumerical characters and underscore are allowed.'))
dispatch_rpc('db', 'duplicate_database', [master_pwd, name, new_name])
return http.local_redirect('/web/database/manager')
except Exception, e:
diff --git a/addons/web/static/src/js/widgets/data_export.js b/addons/web/static/src/js/widgets/data_export.js
index d3135f86ba6..c74b89af11b 100644
--- a/addons/web/static/src/js/widgets/data_export.js
+++ b/addons/web/static/src/js/widgets/data_export.js
@@ -207,9 +207,15 @@ var DataExport = Dialog.extend({
this.records = {};
this.dataset = dataset;
this.exports = new data.DataSetSearch(this, 'ir.exports', this.dataset.get_context());
-
+
this.row_index = 0;
this.row_index_level = 0;
+
+ // The default for the ".modal_content" element is "max-height: 100%;"
+ // but we want it to always expand to "height: 100%;" for this modal.
+ // This can be achieved thanks to LESS modification without touching
+ // the ".modal-content" rules... but not with Internet explorer (11).
+ this.$modal.find(".modal-content").css("height", "100%");
},
start: function() {
var self = this;
@@ -261,7 +267,7 @@ var DataExport = Dialog.extend({
function do_setup_export_formats(formats) {
var $fmts = self.$('.o_export_format');
-
+
_.each(formats, function(format, i) {
var $radio = $('<input/>', {type: 'radio', value: format.tag, name: 'o_export_format_name'});
var $label = $('<label/>', {html: format.label});
@@ -362,7 +368,7 @@ var DataExport = Dialog.extend({
},
on_show_data: function(records, expansion) {
var self = this;
-
+
if(expansion) {
this.$('.o_export_tree_item[data-id="' + expansion + '"]')
.addClass('open')
diff --git a/addons/web/static/src/less/data_export.less b/addons/web/static/src/less/data_export.less
index 3f596bea27d..01a1da80134 100644
--- a/addons/web/static/src/less/data_export.less
+++ b/addons/web/static/src/less/data_export.less
@@ -1,8 +1,8 @@
.o_web_client .o_export {
-
- .o-flex(0, 1, 1000px);
+ .o-flex(1, 1, auto);
.o-flex-display();
.o-flex-flow(column, nowrap);
+ min-height: 0;
> p, > .row {
.o-flex(0, 0, auto);
@@ -28,8 +28,9 @@
}
.o_export_panel {
- .o-flex(1, 0, 0);
+ .o-flex(1, 1, auto);
position: relative;
+ min-height: 0;
> div {
height: 100%;
@@ -59,9 +60,10 @@
.o_left_field_panel, .o_fields_list {
border: 1px solid @odoo-brand-lightsecondary;
overflow: auto;
- .o-flex(1, 0, 0);
+ .o-flex(1, 1, auto);
+ min-height: 0;
}
-
+
.o_export_tree_item {
cursor: pointer;
position: relative;
@@ -72,7 +74,7 @@
background-color: @odoo-brand-primary;
color: white;
}
-
+
.o_expand_parent {
.o-position-absolute(@top: 4px, @left: 5px);
}
diff --git a/addons/web/views/database_manager.html b/addons/web/views/database_manager.html
index f0b3c570c2c..629d2a622ec 100644
--- a/addons/web/views/database_manager.html
+++ b/addons/web/views/database_manager.html
@@ -60,7 +60,7 @@
<div class="row">
<div class="col-md-12">
<label for="name" class="control-label">Database Name</label>
- <input id="name" type="text" name="name" class="form-control" required="required" autocomplete="off"/>
+ <input id="name" type="text" name="name" class="form-control" required="required" autocomplete="off" pattern="^[a-zA-Z][a-zA-Z0-9_]+$" title="Only alphanumerical characters and underscore are allowed"/>
</div>
</div>
</div>
@@ -207,7 +207,7 @@
</div>
<div class="form-group">
<label for="name" class="control-label">Database Name</label>
- <input id="name" type="text" name="name" class="form-control" required="required"/>
+ <input id="name" type="text" name="name" class="form-control" required="required" pattern="^[a-zA-Z][a-zA-Z0-9_]+$" title="Only alphanumerical characters and underscore are allowed"/>
</div>
<div class="form-group">
<label for="copy">This database might have been moved or copied.</label>
@@ -280,7 +280,7 @@
</div>
<div class="form-group">
<label for="new_name" class="control-label">New Name</label>
- <input id="new_name" type="text" name="new_name" class="form-control" required="required"/>
+ <input id="new_name" type="text" name="new_name" class="form-control" required="required" pattern="^[a-zA-Z][a-zA-Z0-9_]+$" title="Only alphanumerical characters and underscore are allowed"/>
</div>
</div>
<div class="modal-footer">
diff --git a/addons/web_editor/static/src/js/rte.summernote.js b/addons/web_editor/static/src/js/rte.summernote.js
index 9f908a245bc..60c096603d8 100644
--- a/addons/web_editor/static/src/js/rte.summernote.js
+++ b/addons/web_editor/static/src/js/rte.summernote.js
@@ -292,7 +292,15 @@ eventHandler.modules.popover.update = function ($popover, oStyle, isAirMode) {
$imagePopover.find('.o_image_alt').text( (alt || "").replace(/&quot;/g, '"') ).parent().toggle(oStyle.image.tagName === "IMG");
$imagePopover.show();
- range.createFromNode(dom.firstChild(oStyle.image)).select();
+ // for video tag (non-void) we select the range over the tag,
+ // for other media types we get the first descendant leaf element
+ var target_node = oStyle.image;
+ if (!oStyle.image.className.match(/(^|\s)media_iframe_video(\s|$)/i)) {
+ target_node = dom.firstChild(target_node);
+ }
+ range.createFromNode(target_node).select();
+ // save range on the editor so it is not lost if restored
+ eventHandler.modules.editor.saveRange(dom.makeLayoutInfo(target_node).editable());
} else {
$(".note-control-selection").hide();
}
diff --git a/addons/web_editor/static/src/js/widgets.js b/addons/web_editor/static/src/js/widgets.js
index 44b6b9502d1..6e7a6784351 100644
--- a/addons/web_editor/static/src/js/widgets.js
+++ b/addons/web_editor/static/src/js/widgets.js
@@ -637,9 +637,12 @@ var fontIconsDialog = Widget.extend({
},
renderElement: function () { // extract list of font (like awesome) from the cheatsheet.
this.iconsParser = fontIcons;
- this.icons = _.flatten(_.map(fontIcons, function (data) {
+ this.icons = _.flatten(_.map(fontIcons, function (data) { // TODO maybe useless now
return data.icons;
}));
+ this.alias = _.flatten(_.map(fontIcons, function (data) {
+ return data.alias;
+ }));
this._super.apply(this, arguments);
},
search: function (needle) {
@@ -741,11 +744,8 @@ var fontIconsDialog = Widget.extend({
case '': continue;
default:
$(".font-icons-icon").removeClass("o_selected").filter("[data-alias*=',"+cls+",']").addClass("o_selected");
- for (var k=0; k<this.icons.length; k++) {
- if (this.icons.indexOf(cls) !== -1) {
- this.$('#fa-icon').val(cls);
- break;
- }
+ if (this.alias.indexOf(cls) !== -1) {
+ this.$('#fa-icon').val(cls);
}
}
}
diff --git a/addons/web_kanban/static/src/js/kanban_view.js b/addons/web_kanban/static/src/js/kanban_view.js
index 9cd35c687c9..5c02eb2450d 100644
--- a/addons/web_kanban/static/src/js/kanban_view.js
+++ b/addons/web_kanban/static/src/js/kanban_view.js
@@ -307,6 +307,9 @@ var KanbanView = View.extend({
return this.fields.active;
},
_is_quick_create_enabled: function() {
+ if(!_.contains(['char', 'boolean', 'many2one'], this.fields[this.group_by_field].type)){
+ return false;
+ }
if (!this.quick_creatable || !this.is_action_enabled('create'))
return false;
if (this.fields_view.arch.attrs.quick_create !== undefined)
diff --git a/addons/web_tour/static/src/js/tour_manager.js b/addons/web_tour/static/src/js/tour_manager.js
index 61c5b11dc7c..ba7adfc5443 100644
--- a/addons/web_tour/static/src/js/tour_manager.js
+++ b/addons/web_tour/static/src/js/tour_manager.js
@@ -294,7 +294,8 @@ return core.Class.extend({
this.update();
}).bind(this));
- window.location.href = session.debug ? $.param.querystring(tour.url, {debug: session.debug}) : tour.url;
+ var url = session.debug ? $.param.querystring(tour.url, {debug: session.debug}) : tour.url;
+ window.location.href = window.location.origin + url;
} else {
this.update();
}
diff --git a/addons/website/static/src/js/website.contentMenu.js b/addons/website/static/src/js/website.contentMenu.js
index 3910825405d..bc7b83bd6c3 100644
--- a/addons/website/static/src/js/website.contentMenu.js
+++ b/addons/website/static/src/js/website.contentMenu.js
@@ -349,6 +349,7 @@ var MenuEntryDialog = widget.LinkDialog.extend({
return {
'TopBar': TopBarContent,
+ 'EditMenuDialog': EditMenuDialog,
};
});
diff --git a/addons/website_quote/models/sale_order.py b/addons/website_quote/models/sale_order.py
index aaf6b53bd93..238a6eea0fd 100644
--- a/addons/website_quote/models/sale_order.py
+++ b/addons/website_quote/models/sale_order.py
@@ -77,6 +77,14 @@ class SaleOrder(models.Model):
total += line.price_subtotal + line.price_unit * ((line.discount or 0.0) / 100.0) * line.product_uom_qty # why is there a discount in a field named amount_undiscounted ??
self.amount_undiscounted = total
+ @api.onchange('partner_id')
+ def onchange_update_description_lang(self):
+ if not self.template_id:
+ return
+ else:
+ template = self.template_id.with_context(lang=self.partner_id.lang)
+ self.website_description = template.website_description
+
@api.onchange('template_id')
def onchange_template_id(self):
if not self.template_id:
diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py
index 7be62cd91d1..3b6d28a1453 100644
--- a/addons/website_sale/models/sale_order.py
+++ b/addons/website_sale/models/sale_order.py
@@ -149,10 +149,19 @@ class SaleOrder(models.Model):
else:
# update line
values = self._website_product_id_change(self.id, product_id, qty=quantity)
-
if self.pricelist_id.discount_policy == 'with_discount' and not self.env.context.get('fixed_price'):
+ order = self.sudo().browse(self.id)
+ product_context = dict(self.env.context)
+ product_context.setdefault('lang', order.partner_id.lang)
+ product_context.update({
+ 'partner': order.partner_id.id,
+ 'quantity': quantity,
+ 'date': order.date_order,
+ 'pricelist': order.pricelist_id.id,
+ })
+ product = self.env['product.product'].with_context(product_context).browse(product_id)
values['price_unit'] = self.env['account.tax']._fix_tax_included_price(
- order_line._get_display_price(order_line.product_id),
+ order_line._get_display_price(product),
order_line.product_id.taxes_id,
order_line.tax_id
)
diff --git a/addons/website_sale/static/src/css/website_sale.css b/addons/website_sale/static/src/css/website_sale.css
index 99a07092c9d..ca6f25ff88f 100644
--- a/addons/website_sale/static/src/css/website_sale.css
+++ b/addons/website_sale/static/src/css/website_sale.css
@@ -446,6 +446,10 @@ label.css_attribute_color.css_not_available {
text-align: center;
}
+.oe_website_sale input.quantity {
+ padding: 0;
+}
+
/* ---- Publish managment and options ---- */
.oe_overlay_options .dropdown ul[name="size"] table {
margin-left: 20px;
diff --git a/addons/website_sale/static/src/css/website_sale.sass b/addons/website_sale/static/src/css/website_sale.sass
index 0ef7cffa5aa..1e93407d4f9 100644
--- a/addons/website_sale/static/src/css/website_sale.sass
+++ b/addons/website_sale/static/src/css/website_sale.sass
@@ -385,6 +385,9 @@ label.css_attribute_color.css_not_available
min-width: 48px
text-align: center
+.oe_website_sale input.quantity
+ padding: 0
+
/* ---- Publish managment and options ---- */
.oe_overlay_options
diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js
index 555d4c8142e..1df1fcd0e97 100644
--- a/addons/website_sale/static/src/js/website_sale.js
+++ b/addons/website_sale/static/src/js/website_sale.js
@@ -74,6 +74,7 @@ odoo.define('website_sale.website_sale', function (require) {
var ajax = require('web.ajax');
var utils = require('web.utils');
var core = require('web.core');
+ var config = require('web.config');
var _t = core._t;
if(!$('.oe_website_sale').length) {
@@ -295,8 +296,10 @@ odoo.define('website_sale.website_sale', function (require) {
var $ul = $(ev.target).closest('.js_add_cart_variants');
var $parent = $ul.closest('.js_product');
var $product_id = $parent.find('input.product_id').first();
- var $price = $parent.find(".oe_price:first .oe_currency_value");
- var $default_price = $parent.find(".oe_default_price:first .oe_currency_value");
+ var $price = $parent.find(".oe_price:first .oe_currency_value")
+ .add($('#product_confirmation').find(".oe_price"));
+ var $default_price = $parent.find(".oe_default_price:first .oe_currency_value")
+ .add($('#product_confirmation').find(".oe_default_price:first .oe_currency_value"));
var $optional_price = $parent.find(".oe_optional:first .oe_currency_value");
var variant_ids = $ul.data("attribute_value_ids");
var values = [];
@@ -454,5 +457,8 @@ odoo.define('website_sale.website_sale', function (require) {
$("select[name='country_id']").change();
});
- $('.ecom-zoomable img[data-zoom]').zoomOdoo({ attach: '#o-carousel-product'});
+ // Deactivate image zoom for mobile devices, since it might prevent users to scroll
+ if (config.device.size_class > config.device.SIZES.XS) {
+ $('.ecom-zoomable img[data-zoom]').zoomOdoo({ attach: '#o-carousel-product'});
+ }
});
diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml
index 6f8f355acea..29f2609ac7b 100644
--- a/addons/website_sale/views/templates.xml
+++ b/addons/website_sale/views/templates.xml
@@ -580,7 +580,7 @@
<a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json">
<i class="fa fa-minus"></i>
</a>
- <input type="text" class="form-control" data-min="1" name="add_qty" value="1"/>
+ <input type="text" class="form-control quantity" data-min="1" name="add_qty" value="1"/>
<a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json">
<i class="fa fa-plus"></i>
</a>
@@ -888,7 +888,7 @@
<a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json hidden-xs">
<i class="fa fa-minus"></i>
</a>
- <input type="text" class="js_quantity form-control" t-att-data-line-id="line.id" t-att-data-product-id="line.product_id.id" t-att-value="int(line.product_uom_qty)" />
+ <input type="text" class="js_quantity form-control quantity" t-att-data-line-id="line.id" t-att-data-product-id="line.product_id.id" t-att-value="int(line.product_uom_qty)" />
<a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json hidden-xs">
<i class="fa fa-plus"></i>
</a>
diff --git a/addons/website_sale_options/views/website_sale_options_templates.xml b/addons/website_sale_options/views/website_sale_options_templates.xml
index 74a50aadac1..16316163d3f 100644
--- a/addons/website_sale_options/views/website_sale_options_templates.xml
+++ b/addons/website_sale_options/views/website_sale_options_templates.xml
@@ -58,14 +58,14 @@
<a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json hidden-xs">
<i class="fa fa-minus"></i>
</a>
- <input type="text" class="js_quantity form-control" data-min="1" name="add_qty" value="1"/>
+ <input type="text" class="js_quantity form-control quantity" data-min="1" name="add_qty" value="1"/>
<a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json hidden-xs">
<i class="fa fa-plus"></i>
</a>
</div>
</td>
<td class="text-center td-price" name="price">
- <span t-attf-class="text-danger oe_default_price" t-att-style="'text-decoration: line-through; white-space: nowrap;' + '' if (compute_currency(product.lst_price) - product.with_context(quantity=1).website_price ) &gt; 0.01 else 'display: none;'"
+ <span t-attf-class="text-danger oe_default_price" t-att-style="text-decoration: line-through; white-space: nowrap;"
t-field="product.lst_price"
t-options='{
"widget": "monetary",