Merge lp:~openerp-dev/openobject-addons/trunk-staging-mat into lp:openobject-addons

Proposed by Martin Trigaux (OpenERP)
Status: Merged
Merged at revision: 8753
Proposed branch: lp:~openerp-dev/openobject-addons/trunk-staging-mat
Merge into: lp:openobject-addons
Diff against target: 3318 lines (+879/-723)
69 files modified
account/account.py (+21/-11)
account/account_invoice.py (+33/-3)
account/account_invoice_view.xml (+3/-3)
account/account_view.xml (+1/-3)
account/partner_view.xml (+1/-1)
account/product_view.xml (+2/-2)
account/project/project_view.xml (+1/-0)
account/report/account_print_invoice.rml (+82/-85)
account/wizard/pos_box.py (+1/-1)
account_followup/account_followup_customers.xml (+3/-2)
account_followup/report/account_followup_report.xml (+1/-1)
account_payment/wizard/account_payment_order.py (+2/-1)
auth_signup/res_users.py (+6/-3)
auth_signup/static/src/js/auth_signup.js (+1/-1)
base_action_rule/base_action_rule.py (+1/-0)
base_vat/base_vat.py (+2/-0)
crm/crm_lead.py (+8/-5)
crm_partner_assign/wizard/crm_forward_to_partner.py (+1/-0)
document_page/document_page_view.xml (+1/-0)
fetchmail/security/ir.model.access.csv (+0/-1)
hr_expense/hr_expense.py (+38/-9)
hr_expense/hr_expense_view.xml (+1/-1)
hr_holidays/hr_holidays_view.xml (+2/-2)
hr_timesheet_sheet/static/src/js/timesheet.js (+35/-9)
im/im.py (+1/-73)
im/security/ir.model.access.csv (+1/-1)
im/static/src/js/im.js (+7/-0)
im/watcher.py (+84/-0)
im_livechat/security/ir.model.access.csv (+2/-0)
im_livechat/static/ext/static/js/livesupport.js (+7/-0)
l10n_ca/__openerp__.py (+2/-2)
l10n_ca/account_tax_en.xml (+2/-8)
l10n_ca/account_tax_fr.xml (+2/-8)
l10n_ca/fiscal_templates_en.xml (+6/-6)
l10n_ca/fiscal_templates_fr.xml (+3/-3)
l10n_it/__openerp__.py (+1/-1)
l10n_it/data/account.tax.code.template.csv (+23/-8)
l10n_it/data/account.tax.template.csv (+65/-70)
l10n_lu/account_financial_report.xml (+15/-15)
mail/mail_mail.py (+0/-3)
mail/mail_message.py (+6/-7)
mail/mail_thread.py (+31/-6)
mail/static/src/js/mail.js (+7/-4)
mail/static/src/xml/mail.xml (+1/-1)
mail/tests/test_mail_gateway.py (+10/-2)
mail/wizard/mail_compose_message.py (+1/-0)
mrp/procurement.py (+5/-0)
mrp/report/order.rml (+67/-86)
portal/security/portal_security.xml (+1/-1)
portal/wizard/portal_wizard.py (+63/-23)
portal_hr_employees/hr_employee_view.xml (+2/-1)
procurement/procurement_view.xml (+1/-0)
project/project.py (+19/-6)
project/report/project_cumulative.xml (+1/-1)
project_issue/project_issue.py (+28/-14)
project_issue/project_issue_view.xml (+14/-13)
project_issue_sheet/project_issue_sheet_view.xml (+2/-1)
project_long_term/project_long_term_view.xml (+3/-2)
purchase/report/order.rml (+57/-79)
purchase/report/request_quotation.rml (+20/-43)
report_webkit/webkit_report.py (+1/-1)
sale/report/sale_order.rml (+62/-83)
sale/res_partner.py (+1/-1)
sale/sale.py (+1/-1)
sale_margin/sale_margin_view.xml (+1/-1)
sale_stock/test/cancel_order_sale_stock.yml (+2/-2)
share/wizard/share_wizard.py (+2/-1)
stock/stock.py (+1/-0)
stock/wizard/stock_partial_picking.py (+1/-1)
To merge this branch: bzr merge lp:~openerp-dev/openobject-addons/trunk-staging-mat
Reviewer Review Type Date Requested Status
Martin Trigaux (OpenERP) Pending
Review via email: mp+167488@code.launchpad.net

Description of the change

various changes

To post a comment you must log in.
8751. By Olivier Dony (Odoo)

[FIX] base_partner_merge: properly ignore computed fields when merging 2 partners

8752. By Launchpad Translations on behalf of openerp

Launchpad automatic translations update.

8753. By Martin Trigaux (OpenERP)

[MERGE] Forward porting of saas-1 up to revision 8739

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'account/account.py'
2--- account/account.py 2013-04-29 15:14:10 +0000
3+++ account/account.py 2013-06-06 12:58:46 +0000
4@@ -1034,9 +1034,15 @@
5 context = {}
6 ids = []
7 if name:
8- ids = self.search(cr, user, [('code','ilike',name)]+ args, limit=limit)
9+ ids = self.search(cr, user,
10+ [('code', 'ilike', name)] + args,
11+ limit=limit,
12+ context=context)
13 if not ids:
14- ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit)
15+ ids = self.search(cr, user,
16+ [('name', operator, name)] + args,
17+ limit=limit,
18+ context=context)
19 return self.name_get(cr, user, ids, context=context)
20
21 def write(self, cr, uid, ids, vals, context=None):
22@@ -1059,10 +1065,14 @@
23 raise osv.except_osv(_('Error!'), _('You should choose the periods that belong to the same company.'))
24 if period_date_start > period_date_stop:
25 raise osv.except_osv(_('Error!'), _('Start period should precede then end period.'))
26+
27+ # /!\ We do not include a criterion on the company_id field below, to allow producing consolidated reports
28+ # on multiple companies. It will only work when start/end periods are selected and no fiscal year is chosen.
29+
30 #for period from = january, we want to exclude the opening period (but it has same date_from, so we have to check if period_from is special or not to include that clause or not in the search).
31 if period_from.special:
32- return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id)])
33- return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id), ('special', '=', False)])
34+ return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop)])
35+ return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('special', '=', False)])
36
37
38 class account_journal_period(osv.osv):
39@@ -1854,6 +1864,12 @@
40 _order = 'code'
41
42
43+def get_precision_tax():
44+ def change_digit_tax(cr):
45+ res = openerp.registry(cr.dbname)['decimal.precision'].precision_get(cr, SUPERUSER_ID, 'Account')
46+ return (16, res+3)
47+ return change_digit_tax
48+
49 class account_tax(osv.osv):
50 """
51 A tax object.
52@@ -1874,12 +1890,6 @@
53 default.update({'name': name + _(' (Copy)')})
54 return super(account_tax, self).copy_data(cr, uid, id, default=default, context=context)
55
56- def get_precision_tax():
57- def change_digit_tax(cr):
58- res = openerp.registry(cr.dbname)['decimal.precision'].precision_get(cr, SUPERUSER_ID, 'Account')
59- return (16, res+2)
60- return change_digit_tax
61-
62 _name = 'account.tax'
63 _description = 'Tax'
64 _columns = {
65@@ -2795,7 +2805,7 @@
66 'chart_template_id': fields.many2one('account.chart.template', 'Chart Template', required=True),
67 'name': fields.char('Tax Name', size=64, required=True),
68 'sequence': fields.integer('Sequence', required=True, help="The sequence field is used to order the taxes lines from lower sequences to higher ones. The order is important if you have a tax that has several tax children. In this case, the evaluation order is important."),
69- 'amount': fields.float('Amount', required=True, digits=(14,4), help="For Tax Type percent enter % ratio between 0-1."),
70+ 'amount': fields.float('Amount', required=True, digits_compute=get_precision_tax(), help="For Tax Type percent enter % ratio between 0-1."),
71 'type': fields.selection( [('percent','Percent'), ('fixed','Fixed'), ('none','None'), ('code','Python Code'), ('balance','Balance')], 'Tax Type', required=True),
72 'applicable_type': fields.selection( [('true','True'), ('code','Python Code')], 'Applicable Type', required=True, help="If not applicable (computed through a Python code), the tax won't appear on the invoice."),
73 'domain':fields.char('Domain', size=32, help="This field is only used if you develop your own module allowing developers to create specific taxes in a custom domain."),
74
75=== modified file 'account/account_invoice.py'
76--- account/account_invoice.py 2013-06-03 10:26:27 +0000
77+++ account/account_invoice.py 2013-06-06 12:58:46 +0000
78@@ -89,13 +89,43 @@
79 return [('none', _('Free Reference'))]
80
81 def _amount_residual(self, cr, uid, ids, name, args, context=None):
82+ """Function of the field residua. It computes the residual amount (balance) for each invoice"""
83+ if context is None:
84+ context = {}
85+ ctx = context.copy()
86 result = {}
87+ currency_obj = self.pool.get('res.currency')
88 for invoice in self.browse(cr, uid, ids, context=context):
89+ nb_inv_in_partial_rec = max_invoice_id = 0
90 result[invoice.id] = 0.0
91 if invoice.move_id:
92- for m in invoice.move_id.line_id:
93- if m.account_id.type in ('receivable','payable'):
94- result[invoice.id] += m.amount_residual_currency
95+ for aml in invoice.move_id.line_id:
96+ if aml.account_id.type in ('receivable','payable'):
97+ if aml.currency_id and aml.currency_id.id == invoice.currency_id.id:
98+ result[invoice.id] += aml.amount_residual_currency
99+ else:
100+ ctx['date'] = aml.date
101+ result[invoice.id] += currency_obj.compute(cr, uid, aml.company_id.currency_id.id, invoice.currency_id.id, aml.amount_residual, context=ctx)
102+
103+ if aml.reconcile_partial_id.line_partial_ids:
104+ #we check if the invoice is partially reconciled and if there are other invoices
105+ #involved in this partial reconciliation (and we sum these invoices)
106+ for line in aml.reconcile_partial_id.line_partial_ids:
107+ if line.invoice:
108+ nb_inv_in_partial_rec += 1
109+ #store the max invoice id as for this invoice we will make a balance instead of a simple division
110+ max_invoice_id = max(max_invoice_id, line.invoice.id)
111+ if nb_inv_in_partial_rec:
112+ #if there are several invoices in a partial reconciliation, we split the residual by the number
113+ #of invoice to have a sum of residual amounts that matches the partner balance
114+ new_value = currency_obj.round(cr, uid, invoice.currency_id, result[invoice.id] / nb_inv_in_partial_rec)
115+ if invoice.id == max_invoice_id:
116+ #if it's the last the invoice of the bunch of invoices partially reconciled together, we make a
117+ #balance to avoid rounding errors
118+ result[invoice.id] = result[invoice.id] - ((nb_inv_in_partial_rec - 1) * new_value)
119+ else:
120+ result[invoice.id] = new_value
121+
122 #prevent the residual amount on the invoice to be less than 0
123 result[invoice.id] = max(result[invoice.id], 0.0)
124 return result
125
126=== modified file 'account/account_invoice_view.xml'
127--- account/account_invoice_view.xml 2013-04-22 15:34:49 +0000
128+++ account/account_invoice_view.xml 2013-06-06 12:58:46 +0000
129@@ -197,7 +197,7 @@
130 <field name="name"/>
131 <field name="company_id" invisible="1"/>
132 <field name="account_id" groups="account.group_account_user"
133- domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]"
134+ domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]"
135 on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
136 <field name="account_analytic_id" groups="analytic.group_analytic_accounting"
137 domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/>
138@@ -320,7 +320,7 @@
139 <group>
140 <field string="Customer" name="partner_id"
141 on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)"
142- groups="base.group_user" context="{'search_default_customer':1, 'show_address': 1}"
143+ context="{'search_default_customer':1, 'show_address': 1}"
144 options='{"always_reload": True}'
145 domain="[('customer', '=', True)]"/>
146 <field name="fiscal_position" widget="selection" />
147@@ -353,7 +353,7 @@
148 <field name="name"/>
149 <field name="company_id" invisible="1"/>
150 <field name="account_id" groups="account.group_account_user"
151- domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]"
152+ domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]"
153 on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
154 <field name="account_analytic_id" groups="analytic.group_analytic_accounting"
155 domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/>
156
157=== modified file 'account/account_view.xml'
158--- account/account_view.xml 2013-05-14 12:03:41 +0000
159+++ account/account_view.xml 2013-06-06 12:58:46 +0000
160@@ -907,9 +907,7 @@
161 <label for="type"/>
162 <div>
163 <field name="type"/>
164- <field name="amount" class="oe_inline"
165- attrs="{'invisible':[('type','in',('none', 'code', 'balance'))]}"/>
166- <label string="%%" attrs="{'invisible':[('type','&lt;&gt;','percent')]}"/>
167+ <field name="amount" attrs="{'invisible':[('type','in',('none', 'code', 'balance'))]}"/>
168 </div>
169 <field name="python_compute" attrs="{'invisible':[('type','!=','code')],'required':[('type','=','code')]}"/>
170 <field name="python_compute_inv" attrs="{'invisible':[('type','!=','code')],'required':[('type','=','code')]}"/>
171
172=== modified file 'account/partner_view.xml'
173--- account/partner_view.xml 2013-05-07 16:51:13 +0000
174+++ account/partner_view.xml 2013-06-06 12:58:46 +0000
175@@ -68,7 +68,7 @@
176 name="%(account.action_invoice_tree)d"
177 context="{'search_default_partner_id': active_id,'default_partner_id': active_id}" groups="account.group_account_invoice"/>
178 <button type="action" string="Journal Items" name="%(account.action_account_moves_all_tree)d" groups="account.group_account_user"/>
179- <button type="action" string="Contracts/Analytic Accounts" name="%(account.action_open_partner_analytic_accounts)d"
180+ <button type="action" string="Contracts" name="%(account.action_open_partner_analytic_accounts)d"
181 groups="analytic.group_analytic_accounting"/>
182 </xpath>
183 </field>
184
185=== modified file 'account/product_view.xml'
186--- account/product_view.xml 2012-12-08 10:33:38 +0000
187+++ account/product_view.xml 2013-06-06 12:58:46 +0000
188@@ -11,11 +11,11 @@
189 <page string="Accounting" groups="account.group_account_invoice">
190 <group name="properties">
191 <group>
192- <field name="property_account_income" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" groups="account.group_account_user"/>
193+ <field name="property_account_income" domain="[('type','=','other')]" groups="account.group_account_user"/>
194 <field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/>
195 </group>
196 <group>
197- <field name="property_account_expense" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" groups="account.group_account_user"/>
198+ <field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user"/>
199 <field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
200 </group>
201 </group>
202
203=== modified file 'account/project/project_view.xml'
204--- account/project/project_view.xml 2013-05-07 16:51:13 +0000
205+++ account/project/project_view.xml 2013-06-06 12:58:46 +0000
206@@ -68,6 +68,7 @@
207 <field name="parent_id" invisible="1"/>
208 <field name="type"/>
209 <field name="company_id" groups="base.group_multi_company"/>
210+ <field name="template_id" invisible="1"/>
211 </tree>
212 </field>
213 </record>
214
215=== modified file 'account/report/account_print_invoice.rml'
216--- account/report/account_print_invoice.rml 2013-03-26 17:02:58 +0000
217+++ account/report/account_print_invoice.rml 2013-06-06 12:58:46 +0000
218@@ -99,42 +99,39 @@
219 <initialize>
220 <paraStyle name="all" alignment="justify"/>
221 </initialize>
222- <paraStyle name="Standard" fontName="Helvetica"/>
223- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
224- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
225- <paraStyle name="Table Contents" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
226- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
227- <paraStyle name="Caption" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
228- <paraStyle name="Index" fontName="Helvetica"/>
229- <paraStyle name="Heading" fontName="Helvetica" fontSize="15.0" leading="19" spaceBefore="12.0" spaceAfter="6.0"/>
230- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
231- <paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
232- <paraStyle name="Footer" fontName="Helvetica"/>
233- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
234- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
235- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
236- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
237- <paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
238- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
239- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
240- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
241- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
242- <paraStyle name="terp_default_Right_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
243- <paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
244- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
245- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
246- <paraStyle name="terp_default_address" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
247- <paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
248- <paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="-3.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
249- <paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
250- <paraStyle name="terp_default_Right_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
251- <paraStyle name="terp_default_Bold_Right_9" rightIndent="0.0" leftIndent="-3.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
252- <paraStyle name="terp_default_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
253- <paraStyle name="terp_default_White_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0" textColor="#ffffff"/>
254- <paraStyle name="terp_default_Note" rightIndent="0.0" leftIndent="9.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
255- <paraStyle name="Table" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
256- <paraStyle name="User Index 10" rightIndent="0.0" leftIndent="127.0" fontName="Helvetica"/>
257- <paraStyle name="Preformatted Text" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
258+ <paraStyle name="Standard"/>
259+ <paraStyle name="Text body" spaceBefore="0.0" spaceAfter="6.0"/>
260+ <paraStyle name="List" spaceBefore="0.0" spaceAfter="6.0"/>
261+ <paraStyle name="Table Contents" spaceBefore="0.0" spaceAfter="6.0"/>
262+ <paraStyle name="Caption" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
263+ <paraStyle name="Index"/>
264+
265+ <paraStyle name="terp_header" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
266+ <paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
267+ <paraStyle name="Footer"/>
268+ <paraStyle name="Horizontal Line" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
269+
270+ <paraStyle name="terp_tblheader_General" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
271+ <paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
272+ <paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
273+ <paraStyle name="terp_tblheader_General_Right" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
274+ <paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
275+ <paraStyle name="terp_tblheader_Details_Right" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
276+
277+ <paraStyle name="terp_default_Right_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
278+ <paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
279+ <paraStyle name="terp_default_address" rightIndent="0.0" leftIndent="0.0" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
280+ <paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
281+ <paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="-3.0" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
282+ <paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
283+ <paraStyle name="terp_default_Right_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
284+ <paraStyle name="terp_default_Bold_Right_9" rightIndent="0.0" leftIndent="-3.0" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
285+ <paraStyle name="terp_default_2" rightIndent="0.0" leftIndent="0.0" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
286+ <paraStyle name="terp_default_White_2" rightIndent="0.0" leftIndent="0.0" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0" textColor="#ffffff"/>
287+
288+ <paraStyle name="Table" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
289+ <paraStyle name="User Index 10" rightIndent="0.0" leftIndent="127.0"/>
290+ <paraStyle name="Preformatted Text" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
291 <images/>
292 </stylesheet>
293 <story>
294@@ -144,12 +141,12 @@
295 <pto_header><!-- Must be after setLang() -->
296 <blockTable colWidths="202.0,87.0,71.0,57.0,42.0,71.0" style="Table7">
297 <tr>
298- <td> <para style="terp_tblheader_Details">Description</para> </td>
299- <td> <para style="terp_tblheader_Details_Centre">Taxes</para> </td>
300- <td> <para style="terp_tblheader_Details_Centre">Quantity</para> </td>
301- <td> <para style="terp_tblheader_Details_Right">Unit Price </para> </td>
302- <td> <para style="terp_tblheader_Details_Right">Disc.(%)</para> </td>
303- <td> <para style="terp_tblheader_Details_Right">Price</para> </td>
304+ <td><para style="terp_tblheader_Details"><b>Description</b></para></td>
305+ <td><para style="terp_tblheader_Details_Centre"><b>Taxes</b></para></td>
306+ <td><para style="terp_tblheader_Details_Centre"><b>Quantity</b></para></td>
307+ <td><para style="terp_tblheader_Details_Right"><b>Unit Price</b></para></td>
308+ <td><para style="terp_tblheader_Details_Right"><b>Disc.(%)</b></para></td>
309+ <td><para style="terp_tblheader_Details_Right"><b>Price</b></para></td>
310 </tr>
311 </blockTable>
312 </pto_header>
313@@ -172,29 +169,29 @@
314 </td>
315 </tr>
316 </blockTable>
317- <para style="terp_header">Invoice [[ ((o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')) or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
318- <para style="terp_header">PRO-FORMA [[ ((o.type == 'out_invoice' and o.state == 'proforma2') or removeParentNode('para')) and '' ]]</para>
319- <para style="terp_header">Draft Invoice [[ ((o.type == 'out_invoice' and o.state == 'draft') or removeParentNode('para')) and '' ]]</para>
320- <para style="terp_header">Cancelled Invoice [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
321- <para style="terp_header">Refund [[ (o.type=='out_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
322- <para style="terp_header">Supplier Refund [[ (o.type=='in_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
323- <para style="terp_header">Supplier Invoice [[ (o.type=='in_invoice' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
324+ <para style="terp_header"><b>Invoice [[ ((o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')) or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
325+ <para style="terp_header"><b>PRO-FORMA [[ ((o.type == 'out_invoice' and o.state == 'proforma2') or removeParentNode('para')) and '' ]]</b></para>
326+ <para style="terp_header"><b>Draft Invoice [[ ((o.type == 'out_invoice' and o.state == 'draft') or removeParentNode('para')) and '' ]]</b></para>
327+ <para style="terp_header"><b>Cancelled Invoice [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
328+ <para style="terp_header"><b>Refund [[ (o.type=='out_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
329+ <para style="terp_header"><b>Supplier Refund [[ (o.type=='in_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
330+ <para style="terp_header"><b>Supplier Invoice [[ (o.type=='in_invoice' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
331 <para style="terp_default_8">
332 <font color="white"> </font>
333 </para>
334 <blockTable colWidths="132.50,132.50,132.50,132.50" style="Table_Invoice_General_Header">
335 <tr>
336 <td>
337- <para style="terp_tblheader_General_Centre">Description</para>
338- </td>
339- <td>
340- <para style="terp_tblheader_General_Centre">Invoice Date</para>
341- </td>
342- <td>
343- <para style="terp_tblheader_General_Centre">Source</para>
344- </td>
345- <td>
346- <para style="terp_tblheader_General_Centre">Customer Code</para>
347+ <para style="terp_tblheader_General_Centre"><b>Description</b></para>
348+ </td>
349+ <td>
350+ <para style="terp_tblheader_General_Centre"><b>Invoice Date</b></para>
351+ </td>
352+ <td>
353+ <para style="terp_tblheader_General_Centre"><b>Source</b></para>
354+ </td>
355+ <td>
356+ <para style="terp_tblheader_General_Centre"><b>Customer Code</b></para>
357 </td>
358 </tr>
359 </blockTable>
360@@ -220,22 +217,22 @@
361 <blockTable colWidths="185.0,70.0,80.0,60.0,50.0,85.0" style="Table7">
362 <tr>
363 <td>
364- <para style="terp_tblheader_General">Description</para>
365- </td>
366- <td>
367- <para style="terp_tblheader_General_Centre">Taxes</para>
368- </td>
369- <td>
370- <para style="terp_tblheader_General_Right">Quantity</para>
371- </td>
372- <td>
373- <para style="terp_tblheader_General_Right">Unit Price</para>
374- </td>
375- <td>
376- <para style="terp_tblheader_General_Right">Disc.(%)</para>
377- </td>
378- <td>
379- <para style="terp_tblheader_General_Right">Price</para>
380+ <para style="terp_tblheader_General"><b>Description</b></para>
381+ </td>
382+ <td>
383+ <para style="terp_tblheader_General_Centre"><b>Taxes</b></para>
384+ </td>
385+ <td>
386+ <para style="terp_tblheader_General_Right"><b>Quantity</b></para>
387+ </td>
388+ <td>
389+ <para style="terp_tblheader_General_Right"><b>Unit Price</b></para>
390+ </td>
391+ <td>
392+ <para style="terp_tblheader_General_Right"><b>Disc.(%)</b></para>
393+ </td>
394+ <td>
395+ <para style="terp_tblheader_General_Right"><b>Price</b></para>
396 </td>
397 </tr>
398 </blockTable>
399@@ -298,10 +295,10 @@
400 </para>
401 </td>
402 <td>
403- <para style="terp_tblheader_Details">Total:</para>
404+ <para style="terp_tblheader_Details"><b>Total:</b></para>
405 </td>
406 <td>
407- <para style="terp_default_Bold_Right_9">[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</para>
408+ <para style="terp_default_Bold_Right_9"><b>[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</b></para>
409 </td>
410 </tr>
411 </blockTable>
412@@ -311,13 +308,13 @@
413 <blockTable colWidths="205.0,71.0,71.0,183.0" style="Table9">
414 <tr>
415 <td>
416- <para style="terp_tblheader_Details">Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</para>
417- </td>
418- <td>
419- <para style="terp_tblheader_Details_Right">Base </para>
420- </td>
421- <td>
422- <para style="terp_tblheader_Details_Right">Amount </para>
423+ <para style="terp_tblheader_Details"><b>Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</b></para>
424+ </td>
425+ <td>
426+ <para style="terp_tblheader_Details_Right"><b>Base </b></para>
427+ </td>
428+ <td>
429+ <para style="terp_tblheader_Details_Right"><b>Amount </b></para>
430 </td>
431 <td>
432 <para style="terp_default_8">
433@@ -361,7 +358,7 @@
434 <blockTable colWidths="120.0,410.0" style="Table1">
435 <tr>
436 <td>
437- <para style="terp_default_Bold_9">Fiscal Position Remark : </para>
438+ <para style="terp_default_Bold_9"><b>Fiscal Position Remark : </b></para>
439 </td>
440 <td>
441 <para style="terp_default_9">[[ (o.fiscal_position and o.fiscal_position.note and format(o.fiscal_position.note)) or removeParentNode('blockTable') ]]</para>
442
443=== modified file 'account/wizard/pos_box.py'
444--- account/wizard/pos_box.py 2013-05-21 12:23:59 +0000
445+++ account/wizard/pos_box.py 2013-06-06 12:58:46 +0000
446@@ -22,7 +22,7 @@
447
448 records = self.pool[active_model].browse(cr, uid, active_ids, context=context)
449
450- return self._run(cr, uid, ids, records, context=None)
451+ return self._run(cr, uid, ids, records, context=context)
452
453 def _run(self, cr, uid, ids, records, context=None):
454 for box in self.browse(cr, uid, ids, context=context):
455
456=== modified file 'account_followup/account_followup_customers.xml'
457--- account_followup/account_followup_customers.xml 2013-04-22 15:34:49 +0000
458+++ account_followup/account_followup_customers.xml 2013-06-06 12:58:46 +0000
459@@ -9,11 +9,12 @@
460 <field name="model">res.partner</field>
461 <field name="priority" eval="20"/>
462 <field name="arch" type="xml">
463- <tree string="Customer Followup">
464+ <tree string="Customer Followup" create="false" delete="false">
465 <field name="display_name"/>
466 <field name="payment_next_action_date"/>
467 <field name="payment_next_action"/>
468 <field name="user_id" invisible="1"/>
469+ <field name="country_id" invisible="1"/>
470 <field name="parent_id" invisible="1"/>
471 <field name="payment_responsible_id"/>
472 <field name="payment_earliest_due_date"/>
473@@ -97,7 +98,7 @@
474 <button name="action_done" type="object" string="⇾ Mark as Done"
475 help="Click to mark the action as done." class="oe_link"
476 attrs="{'invisible':[('payment_next_action_date','=', False)]}"
477- groups="base.group_partner_manager"/>
478+ groups="account.group_account_user"/>
479 <field name="payment_next_action" placeholder="Action to be taken e.g. Give a phonecall, Check if it's paid, ..."/>
480 </div>
481 </group>
482
483=== modified file 'account_followup/report/account_followup_report.xml'
484--- account_followup/report/account_followup_report.xml 2012-12-04 10:31:46 +0000
485+++ account_followup/report/account_followup_report.xml 2013-06-06 12:58:46 +0000
486@@ -6,7 +6,7 @@
487 <field name="name">account_followup.stat.tree</field>
488 <field name="model">account_followup.stat</field>
489 <field name="arch" type="xml">
490- <tree string="Follow-up lines">
491+ <tree string="Follow-up lines" create="false">
492 <field name="partner_id"/>
493 <field name="date_move"/>
494 <field name="date_move_last"/>
495
496=== modified file 'account_payment/wizard/account_payment_order.py'
497--- account_payment/wizard/account_payment_order.py 2013-04-15 10:23:49 +0000
498+++ account_payment/wizard/account_payment_order.py 2013-06-06 12:58:46 +0000
499@@ -23,6 +23,7 @@
500 from lxml import etree
501
502 from openerp.osv import fields, osv
503+from openerp.tools.translate import _
504
505 class payment_order_create(osv.osv_memory):
506 """
507@@ -108,7 +109,7 @@
508 context.update({'line_ids': line_ids})
509 model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'view_create_payment_order_lines')], context=context)
510 resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
511- return {'name': ('Entrie Lines'),
512+ return {'name': _('Entry Lines'),
513 'context': context,
514 'view_type': 'form',
515 'view_mode': 'form',
516
517=== modified file 'auth_signup/res_users.py'
518--- auth_signup/res_users.py 2013-06-04 15:15:08 +0000
519+++ auth_signup/res_users.py 2013-06-06 12:58:46 +0000
520@@ -56,19 +56,22 @@
521 def _get_signup_url_for_action(self, cr, uid, ids, action='login', view_type=None, menu_id=None, res_id=None, model=None, context=None):
522 """ generate a signup url for the given partner ids and action, possibly overriding
523 the url state components (menu_id, id, view_type) """
524+ if context is None:
525+ context= {}
526 res = dict.fromkeys(ids, False)
527 base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
528 for partner in self.browse(cr, uid, ids, context):
529 # when required, make sure the partner has a valid signup token
530- if context and context.get('signup_valid') and not partner.user_ids:
531+ if context.get('signup_valid') and not partner.user_ids:
532 self.signup_prepare(cr, uid, [partner.id], context=context)
533 partner.refresh()
534
535 # the parameters to encode for the query and fragment part of url
536 query = {'db': cr.dbname}
537- fragment = {'action': action, 'type': partner.signup_type}
538+ signup_type = context.get('signup_force_type_in_url', partner.signup_type or '')
539+ fragment = {'action': action, 'type': signup_type}
540
541- if partner.signup_token:
542+ if partner.signup_token and signup_type:
543 fragment['token'] = partner.signup_token
544 elif partner.user_ids:
545 fragment['db'] = cr.dbname
546
547=== modified file 'auth_signup/static/src/js/auth_signup.js'
548--- auth_signup/static/src/js/auth_signup.js 2013-05-21 14:57:23 +0000
549+++ auth_signup/static/src/js/auth_signup.js 2013-06-06 12:58:46 +0000
550@@ -7,7 +7,7 @@
551 var self = this;
552 this.signup_enabled = false;
553 this.reset_password_enabled = false;
554- return this._super().then(function() {
555+ return this._super().always(function() {
556
557 // Switches the login box to the select mode whith mode == [default|signup|reset]
558 self.on('change:login_mode', self, function() {
559
560=== modified file 'base_action_rule/base_action_rule.py'
561--- base_action_rule/base_action_rule.py 2013-06-04 13:14:28 +0000
562+++ base_action_rule/base_action_rule.py 2013-06-06 12:58:46 +0000
563@@ -66,6 +66,7 @@
564 [('on_create', 'On Creation'), ('on_write', 'On Update'), ('on_time', 'Based on Timed Condition')],
565 string='When to Run'),
566 'trg_date_id': fields.many2one('ir.model.fields', string='Trigger Date',
567+ help="When should the condition be triggered. If present, will be checked by the scheduler. If empty, will be checked at creation and update.",
568 domain="[('model_id', '=', model_id), ('ttype', 'in', ('date', 'datetime'))]"),
569 'trg_date_range': fields.integer('Delay after trigger date',
570 help="Delay after the trigger date." \
571
572=== modified file 'base_vat/base_vat.py'
573--- base_vat/base_vat.py 2013-04-22 15:34:49 +0000
574+++ base_vat/base_vat.py 2013-06-06 12:58:46 +0000
575@@ -83,6 +83,8 @@
576 Check the VAT number depending of the country.
577 http://sima-pc.com/nif.php
578 '''
579+ if not ustr(country_code).encode('utf-8').isalpha():
580+ return False
581 check_func_name = 'check_vat_' + country_code
582 check_func = getattr(self, check_func_name, None) or \
583 getattr(vatnumber, check_func_name, None)
584
585=== modified file 'crm/crm_lead.py'
586--- crm/crm_lead.py 2013-05-22 14:50:42 +0000
587+++ crm/crm_lead.py 2013-06-06 12:58:46 +0000
588@@ -77,12 +77,12 @@
589
590 _track = {
591 'state': {
592- 'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'new',
593+ 'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['new', 'draft'],
594 'crm.mt_lead_won': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done',
595 'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'cancel',
596 },
597 'stage_id': {
598- 'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'cancel', 'done'],
599+ 'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'draft', 'cancel', 'done'],
600 },
601 }
602
603@@ -103,7 +103,9 @@
604 if vals.get('type'):
605 ctx['default_type'] = vals['type']
606 vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx)
607- return super(crm_lead, self).create(cr, uid, vals, context=context)
608+ # context: no_log, because subtype already handle this
609+ create_context = dict(context, mail_create_nolog=True)
610+ return super(crm_lead, self).create(cr, uid, vals, context=create_context)
611
612 def _get_default_section_id(self, cr, uid, context=None):
613 """ Gives default section by checking if present in the context """
614@@ -678,8 +680,9 @@
615 merged_data['stage_id'] = section_stage_ids and section_stage_ids[0] or False
616 # Write merged data into first opportunity
617 self.write(cr, uid, [highest.id], merged_data, context=context)
618- # Delete tail opportunities
619- self.unlink(cr, uid, [x.id for x in tail_opportunities], context=context)
620+ # Delete tail opportunities
621+ # We use the SUPERUSER to avoid access rights issues because as the user had the rights to see the records it should be safe to do so
622+ self.unlink(cr, SUPERUSER_ID, [x.id for x in tail_opportunities], context=context)
623
624 return highest.id
625
626
627=== modified file 'crm_partner_assign/wizard/crm_forward_to_partner.py'
628--- crm_partner_assign/wizard/crm_forward_to_partner.py 2013-05-10 14:14:59 +0000
629+++ crm_partner_assign/wizard/crm_forward_to_partner.py 2013-06-06 12:58:46 +0000
630@@ -124,6 +124,7 @@
631 lead_ids = context and context.get('active_ids', []) or []
632 value = self.default_get(cr, uid, ['body', 'email_to', 'email_cc', 'subject', 'history_mode'], context=context)
633 value.pop('composition_mode')
634+ self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner.id for partner in wizard.partner_ids], context=context)
635 self.write(cr, uid, ids, value, context=context)
636
637 return self.send_mail(cr, uid, ids, context=context)
638
639=== modified file 'document_page/document_page_view.xml'
640--- document_page/document_page_view.xml 2013-01-08 10:54:10 +0000
641+++ document_page/document_page_view.xml 2013-06-06 12:58:46 +0000
642@@ -26,6 +26,7 @@
643 <tree string="Document Page">
644 <field name="name"/>
645 <field name="parent_id"/>
646+ <field name="create_uid" invisible="1"/>
647 <field name="write_uid"/>
648 <field name="write_date"/>
649 </tree>
650
651=== modified file 'fetchmail/security/ir.model.access.csv'
652--- fetchmail/security/ir.model.access.csv 2011-12-19 16:54:40 +0000
653+++ fetchmail/security/ir.model.access.csv 2013-06-06 12:58:46 +0000
654@@ -1,3 +1,2 @@
655 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
656-access_fetchmail_server,fetchmail.server,model_fetchmail_server,,1,0,0,0
657 access_fetchmail_server,fetchmail.server,model_fetchmail_server,base.group_system,1,1,1,1
658
659=== modified file 'hr_expense/hr_expense.py'
660--- hr_expense/hr_expense.py 2013-04-18 12:31:45 +0000
661+++ hr_expense/hr_expense.py 2013-06-06 12:58:46 +0000
662@@ -57,10 +57,7 @@
663
664 def _get_currency(self, cr, uid, context=None):
665 user = self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0]
666- if user.company_id:
667- return user.company_id.currency_id.id
668- else:
669- return self.pool.get('res.currency').search(cr, uid, [('rate','=',1.0)], context=context)[0]
670+ return user.company_id.currency_id.id
671
672 _name = "hr.expense.expense"
673 _inherit = ['mail.thread']
674@@ -99,11 +96,13 @@
675 ('cancelled', 'Refused'),
676 ('confirm', 'Waiting Approval'),
677 ('accepted', 'Approved'),
678- ('done', 'Done'),
679+ ('done', 'Waiting Payment'),
680+ ('paid', 'Paid'),
681 ],
682 'Status', readonly=True, track_visibility='onchange',
683 help='When the expense request is created the status is \'Draft\'.\n It is confirmed by the user and request is sent to admin, the status is \'Waiting Confirmation\'.\
684- \nIf the admin accepts it, the status is \'Accepted\'.\n If a receipt is made for the expense request, the status is \'Done\'.'),
685+ \nIf the admin accepts it, the status is \'Accepted\'.\n If the accounting entries are made for the expense request, the status is \'Waiting Payment\'.'),
686+
687 }
688 _defaults = {
689 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.employee', context=c),
690@@ -114,6 +113,12 @@
691 'currency_id': _get_currency,
692 }
693
694+ def copy(self, cr, uid, id, default=None, context=None):
695+ if default is None:
696+ default = {}
697+ default.update(account_move_id=False)
698+ return super(hr_expense_expense, self).copy(cr, uid, id, default=default, context=context)
699+
700 def unlink(self, cr, uid, ids, context=None):
701 for rec in self.browse(cr, uid, ids, context=context):
702 if rec.state != 'draft':
703@@ -282,7 +287,6 @@
704 tax_code_found= False
705
706 #Calculate tax according to default tax on product
707-
708 taxes = []
709 #Taken from product_id_onchange in account.invoice
710 if line.product_id:
711@@ -319,8 +323,11 @@
712 tax_code_found = True
713 res[-1]['tax_code_id'] = tax_code_id
714 res[-1]['tax_amount'] = cur_obj.compute(cr, uid, exp.currency_id.id, company_currency, tax_amount, context={'date': exp.date_confirm})
715-
716- #Will create the tax here as we don't have the access
717+ ##
718+ is_price_include = tax_obj.read(cr,uid,tax['id'],['price_include'],context)['price_include']
719+ if is_price_include:
720+ ## We need to deduce the price for the tax
721+ res[-1]['price'] = res[-1]['price'] - (tax['amount'] * tax['base_sign'] or 0.0)
722 assoc_tax = {
723 'type':'tax',
724 'name':tax['name'],
725@@ -449,4 +456,26 @@
726 return res
727
728
729+class account_move_line(osv.osv):
730+ _inherit = "account.move.line"
731+
732+ def reconcile(self, cr, uid, ids, type='auto', writeoff_acc_id=False, writeoff_period_id=False, writeoff_journal_id=False, context=None):
733+ res = super(account_move_line, self).reconcile(cr, uid, ids, type=type, writeoff_acc_id=writeoff_acc_id, writeoff_period_id=writeoff_period_id, writeoff_journal_id=writeoff_journal_id, context=context)
734+ #when making a full reconciliation of account move lines 'ids', we may need to recompute the state of some hr.expense
735+ account_move_ids = [aml.move_id.id for aml in self.browse(cr, uid, ids, context=context)]
736+ expense_obj = self.pool.get('hr.expense.expense')
737+ currency_obj = self.pool.get('res.currency')
738+ if account_move_ids:
739+ expense_ids = expense_obj.search(cr, uid, [('account_move_id', 'in', account_move_ids)], context=context)
740+ for expense in expense_obj.browse(cr, uid, expense_ids, context=context):
741+ if expense.state == 'done':
742+ #making the postulate it has to be set paid, then trying to invalidate it
743+ new_status_is_paid = True
744+ for aml in expense.account_move_id.line_id:
745+ if aml.account_id.type == 'payable' and not currency_obj.is_zero(cr, uid, expense.company_id.currency_id, aml.amount_residual):
746+ new_status_is_paid = False
747+ if new_status_is_paid:
748+ expense_obj.write(cr, uid, [expense.id], {'state': 'paid'}, context=context)
749+ return res
750+
751 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
752
753=== modified file 'hr_expense/hr_expense_view.xml'
754--- hr_expense/hr_expense_view.xml 2013-04-22 15:34:49 +0000
755+++ hr_expense/hr_expense_view.xml 2013-06-06 12:58:46 +0000
756@@ -68,7 +68,7 @@
757 <button name="draft" states="confirm,cancelled" string="Set to Draft" type="workflow" groups="base.group_hr_user" />
758 <button name="done" states="accepted" string="Generate Accounting Entries" type="workflow" groups="account.group_account_invoice" class="oe_highlight"/>
759 <button name="action_view_move" states="done" string="Open Accounting Entries" type="object" groups="account.group_account_invoice"/>
760- <field name="state" widget="statusbar" statusbar_visible="draft,confirm,accepted,done" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/>
761+ <field name="state" widget="statusbar" statusbar_visible="draft,confirm,accepted,done,paid" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/>
762 </header>
763 <sheet>
764 <group>
765
766=== modified file 'hr_holidays/hr_holidays_view.xml'
767--- hr_holidays/hr_holidays_view.xml 2013-02-26 10:55:28 +0000
768+++ hr_holidays/hr_holidays_view.xml 2013-06-06 12:58:46 +0000
769@@ -40,8 +40,8 @@
770 <field name="name">Leave Request</field>
771 <field name="model">hr.holidays</field>
772 <field name="arch" type="xml">
773- <calendar string="Leave Request" color="user_id" date_start="date_from" date_stop="date_to">
774- <field name="user_id"/>
775+ <calendar string="Leave Request" color="employee_id" date_start="date_from" date_stop="date_to">
776+ <field name="employee_id"/>
777 <field name="holiday_status_id"/>
778 </calendar>
779 </field>
780
781=== modified file 'hr_timesheet_sheet/static/src/js/timesheet.js'
782--- hr_timesheet_sheet/static/src/js/timesheet.js 2012-12-17 11:13:37 +0000
783+++ hr_timesheet_sheet/static/src/js/timesheet.js 2013-06-06 12:58:46 +0000
784@@ -163,24 +163,42 @@
785 this.dfm = undefined;
786 }
787 },
788+ is_valid_value:function(value){
789+ var split_value = value.split(":");
790+ var valid_value = true;
791+ if (split_value.length > 2)
792+ return false;
793+ _.detect(split_value,function(num){
794+ if(isNaN(num)){
795+ valid_value = false;
796+ }
797+ });
798+ return valid_value;
799+ },
800 display_data: function() {
801 var self = this;
802 self.$el.html(QWeb.render("hr_timesheet_sheet.WeeklyTimesheet", {widget: self}));
803 _.each(self.accounts, function(account) {
804 _.each(_.range(account.days.length), function(day_count) {
805 if (!self.get('effective_readonly')) {
806- self.get_box(account, day_count).val(self.sum_box(account, day_count)).change(function() {
807- var num = Number($(this).val());
808+ self.get_box(account, day_count).val(self.sum_box(account, day_count, true)).change(function() {
809+ var num = $(this).val();
810+ if (self.is_valid_value(num)){
811+ num = (num == 0)?0:Number(self.parse_client(num));
812+ }
813 if (isNaN(num)) {
814- $(this).val(self.sum_box(account, day_count));
815+ $(this).val(self.sum_box(account, day_count, true));
816 } else {
817 account.days[day_count].lines[0].unit_amount += num - self.sum_box(account, day_count);
818 self.display_totals();
819 self.sync();
820+ if(!isNaN($(this).val())){
821+ $(this).val(self.sum_box(account, day_count, true));
822+ }
823 }
824 });
825 } else {
826- self.get_box(account, day_count).html(self.sum_box(account, day_count));
827+ self.get_box(account, day_count).html(self.sum_box(account, day_count, true));
828 }
829 });
830 });
831@@ -247,12 +265,12 @@
832 get_super_total: function() {
833 return this.$('.oe_timesheet_weekly_supertotal');
834 },
835- sum_box: function(account, day_count) {
836+ sum_box: function(account, day_count, show_value_in_hour) {
837 var line_total = 0;
838 _.each(account.days[day_count].lines, function(line) {
839 line_total += line.unit_amount;
840 });
841- return line_total;
842+ return (show_value_in_hour && line_total != 0)?this.format_client(line_total):line_total;
843 },
844 display_totals: function() {
845 var self = this;
846@@ -266,12 +284,12 @@
847 day_tots[day_count] += sum;
848 super_tot += sum;
849 });
850- self.get_total(account).html(acc_tot);
851+ self.get_total(account).html(self.format_client(acc_tot));
852 });
853 _.each(_.range(self.dates.length), function(day_count) {
854- self.get_day_total(day_count).html(day_tots[day_count]);
855+ self.get_day_total(day_count).html(self.format_client(day_tots[day_count]));
856 });
857- self.get_super_total().html(super_tot);
858+ self.get_super_total().html(self.format_client(super_tot));
859 },
860 sync: function() {
861 var self = this;
862@@ -279,6 +297,14 @@
863 self.set({sheets: this.generate_o2m_value()});
864 self.setting = false;
865 },
866+ //converts hour value to float
867+ parse_client: function(value) {
868+ return instance.web.parse_value(value, { type:"float_time" });
869+ },
870+ //converts float value to hour
871+ format_client:function(value){
872+ return instance.web.format_value(value, { type:"float_time" });
873+ },
874 generate_o2m_value: function() {
875 var self = this;
876 var ops = [];
877
878=== modified file 'im/im.py'
879--- im/im.py 2013-04-04 08:34:27 +0000
880+++ im/im.py 2013-06-06 12:58:46 +0000
881@@ -90,79 +90,6 @@
882 DISCONNECTION_TIMER = POLL_TIMER + 5
883 WATCHER_ERROR_DELAY = 10
884
885-if openerp.evented:
886- import gevent
887- import gevent.event
888-
889- class ImWatcher(object):
890- watchers = {}
891-
892- @staticmethod
893- def get_watcher(db_name):
894- if not ImWatcher.watchers.get(db_name):
895- ImWatcher(db_name)
896- return ImWatcher.watchers[db_name]
897-
898- def __init__(self, db_name):
899- self.db_name = db_name
900- ImWatcher.watchers[db_name] = self
901- self.waiting = 0
902- self.wait_id = 0
903- self.users = {}
904- self.users_watch = {}
905- gevent.spawn(self.loop)
906-
907- def loop(self):
908- _logger.info("Begin watching on channel im_channel for database " + self.db_name)
909- stop = False
910- while not stop:
911- try:
912- registry = openerp.modules.registry.RegistryManager.get(self.db_name)
913- with registry.cursor() as cr:
914- listen_channel(cr, "im_channel", self.handle_message, self.check_stop)
915- stop = True
916- except:
917- # if something crash, we wait some time then try again
918- _logger.exception("Exception during watcher activity")
919- time.sleep(WATCHER_ERROR_DELAY)
920- _logger.info("End watching on channel im_channel for database " + self.db_name)
921- del ImWatcher.watchers[self.db_name]
922-
923- def handle_message(self, message):
924- if message["type"] == "message":
925- for waiter in self.users.get(message["receiver"], {}).values():
926- waiter.set()
927- else: #type status
928- for waiter in self.users_watch.get(message["user"], {}).values():
929- waiter.set()
930-
931- def check_stop(self):
932- return self.waiting == 0
933-
934- def _get_wait_id(self):
935- self.wait_id += 1
936- return self.wait_id
937-
938- def stop(self, user_id, watch_users, timeout=None):
939- wait_id = self._get_wait_id()
940- event = gevent.event.Event()
941- self.waiting += 1
942- self.users.setdefault(user_id, {})[wait_id] = event
943- for watch in watch_users:
944- self.users_watch.setdefault(watch, {})[wait_id] = event
945- try:
946- event.wait(timeout)
947- finally:
948- for watch in watch_users:
949- del self.users_watch[watch][wait_id]
950- if len(self.users_watch[watch]) == 0:
951- del self.users_watch[watch]
952- del self.users[user_id][wait_id]
953- if len(self.users[user_id]) == 0:
954- del self.users[user_id]
955- self.waiting -= 1
956-
957-
958 class LongPollingController(openerp.addons.web.http.Controller):
959 _cp_path = '/longpolling/im'
960
961@@ -171,6 +98,7 @@
962 assert_uuid(uuid)
963 if not openerp.evented:
964 raise Exception("Not usable in a server not running gevent")
965+ from openerp.addons.im.watcher import ImWatcher
966 if db is not None:
967 req.session._db = db
968 req.session._uid = uid
969
970=== modified file 'im/security/ir.model.access.csv'
971--- im/security/ir.model.access.csv 2013-02-04 15:36:12 +0000
972+++ im/security/ir.model.access.csv 2013-06-06 12:58:46 +0000
973@@ -1,3 +1,3 @@
974 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
975 access_im_message,im.message,model_im_message,base.group_user,1,0,1,0
976-access_im_user,im.user,model_im_user,base.group_user,1,1,1,0
977\ No newline at end of file
978+access_im_user,im.user,model_im_user,,1,1,1,0
979\ No newline at end of file
980
981=== modified file 'im/static/src/audio/Ting.mp3'
982Binary files im/static/src/audio/Ting.mp3 2013-01-11 10:34:59 +0000 and im/static/src/audio/Ting.mp3 2013-06-06 12:58:46 +0000 differ
983=== modified file 'im/static/src/audio/Ting.ogg'
984Binary files im/static/src/audio/Ting.ogg 2013-01-11 10:34:59 +0000 and im/static/src/audio/Ting.ogg 2013-06-06 12:58:46 +0000 differ
985=== modified file 'im/static/src/js/im.js'
986--- im/static/src/js/im.js 2013-04-23 09:25:20 +0000
987+++ im/static/src/js/im.js 2013-06-06 12:58:46 +0000
988@@ -284,6 +284,10 @@
989 return this.activated;
990 },
991 create_ting: function() {
992+ if (typeof(Audio) === "undefined") {
993+ this.ting = {play: function() {}};
994+ return;
995+ }
996 var kitten = jQuery.param !== undefined && jQuery.deparam(jQuery.param.querystring()).kitten !== undefined;
997 this.ting = new Audio(instance.webclient.session.origin + "/im/static/src/audio/" + (kitten ? "purr" : "Ting") +
998 (new Audio().canPlayType("audio/ogg; codecs=vorbis") ? ".ogg" : ".mp3"));
999@@ -408,6 +412,9 @@
1000 return;
1001 }
1002 var mes = this.$("input").val();
1003+ if (! mes.trim()) {
1004+ return;
1005+ }
1006 this.$("input").val("");
1007 var send_it = _.bind(function() {
1008 var model = new instance.web.Model("im.message");
1009
1010=== added file 'im/watcher.py'
1011--- im/watcher.py 1970-01-01 00:00:00 +0000
1012+++ im/watcher.py 2013-06-06 12:58:46 +0000
1013@@ -0,0 +1,84 @@
1014+
1015+import openerp
1016+import openerp.tools.config
1017+import openerp.modules.registry
1018+from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
1019+import datetime
1020+from openerp.osv import osv, fields
1021+import time
1022+import logging
1023+import json
1024+import select
1025+import gevent
1026+import gevent.event
1027+from openerp.addons.im.im import *
1028+
1029+_logger = logging.getLogger(__name__)
1030+
1031+class ImWatcher(object):
1032+ watchers = {}
1033+
1034+ @staticmethod
1035+ def get_watcher(db_name):
1036+ if not ImWatcher.watchers.get(db_name):
1037+ ImWatcher(db_name)
1038+ return ImWatcher.watchers[db_name]
1039+
1040+ def __init__(self, db_name):
1041+ self.db_name = db_name
1042+ ImWatcher.watchers[db_name] = self
1043+ self.waiting = 0
1044+ self.wait_id = 0
1045+ self.users = {}
1046+ self.users_watch = {}
1047+ gevent.spawn(self.loop)
1048+
1049+ def loop(self):
1050+ _logger.info("Begin watching on channel im_channel for database " + self.db_name)
1051+ stop = False
1052+ while not stop:
1053+ try:
1054+ registry = openerp.modules.registry.RegistryManager.get(self.db_name)
1055+ with registry.cursor() as cr:
1056+ listen_channel(cr, "im_channel", self.handle_message, self.check_stop)
1057+ stop = True
1058+ except:
1059+ # if something crash, we wait some time then try again
1060+ _logger.exception("Exception during watcher activity")
1061+ time.sleep(WATCHER_ERROR_DELAY)
1062+ _logger.info("End watching on channel im_channel for database " + self.db_name)
1063+ del ImWatcher.watchers[self.db_name]
1064+
1065+ def handle_message(self, message):
1066+ if message["type"] == "message":
1067+ for waiter in self.users.get(message["receiver"], {}).values():
1068+ waiter.set()
1069+ else: #type status
1070+ for waiter in self.users_watch.get(message["user"], {}).values():
1071+ waiter.set()
1072+
1073+ def check_stop(self):
1074+ return self.waiting == 0
1075+
1076+ def _get_wait_id(self):
1077+ self.wait_id += 1
1078+ return self.wait_id
1079+
1080+ def stop(self, user_id, watch_users, timeout=None):
1081+ wait_id = self._get_wait_id()
1082+ event = gevent.event.Event()
1083+ self.waiting += 1
1084+ self.users.setdefault(user_id, {})[wait_id] = event
1085+ for watch in watch_users:
1086+ self.users_watch.setdefault(watch, {})[wait_id] = event
1087+ try:
1088+ event.wait(timeout)
1089+ finally:
1090+ for watch in watch_users:
1091+ del self.users_watch[watch][wait_id]
1092+ if len(self.users_watch[watch]) == 0:
1093+ del self.users_watch[watch]
1094+ del self.users[user_id][wait_id]
1095+ if len(self.users[user_id]) == 0:
1096+ del self.users[user_id]
1097+ self.waiting -= 1
1098
1099=== modified file 'im_livechat/security/ir.model.access.csv'
1100--- im_livechat/security/ir.model.access.csv 2013-03-15 11:21:53 +0000
1101+++ im_livechat/security/ir.model.access.csv 2013-06-06 12:58:46 +0000
1102@@ -2,5 +2,7 @@
1103 access_ls_chann1,im_livechat.channel,model_im_livechat_channel,,1,0,0,0
1104 access_ls_chann2,im_livechat.channel,model_im_livechat_channel,group_im_livechat,1,1,1,0
1105 access_ls_chann3,im_livechat.channel,model_im_livechat_channel,group_im_livechat_manager,1,1,1,1
1106+access_ls_message_portal,im_livechat.im.message.portal,im.model_im_message,portal.group_portal,0,0,0,0
1107+access_im_user_portal,im_livechat.im.user.portal,im.model_im_user,portal.group_portal,1,0,0,0
1108 access_ls_message,im_livechat.im.message,im.model_im_message,portal.group_anonymous,0,0,0,0
1109 access_im_user,im_livechat.im.user,im.model_im_user,portal.group_anonymous,1,0,0,0
1110\ No newline at end of file
1111
1112=== modified file 'im_livechat/static/ext/static/audio/Ting.mp3'
1113Binary files im_livechat/static/ext/static/audio/Ting.mp3 2013-01-16 16:16:24 +0000 and im_livechat/static/ext/static/audio/Ting.mp3 2013-06-06 12:58:46 +0000 differ
1114=== modified file 'im_livechat/static/ext/static/audio/Ting.ogg'
1115Binary files im_livechat/static/ext/static/audio/Ting.ogg 2013-01-16 16:16:24 +0000 and im_livechat/static/ext/static/audio/Ting.ogg 2013-06-06 12:58:46 +0000 differ
1116=== modified file 'im_livechat/static/ext/static/js/livesupport.js'
1117--- im_livechat/static/ext/static/js/livesupport.js 2013-03-15 11:21:53 +0000
1118+++ im_livechat/static/ext/static/js/livesupport.js 2013-06-06 12:58:46 +0000
1119@@ -268,6 +268,10 @@
1120 return this.activated;
1121 },
1122 create_ting: function() {
1123+ if (typeof(Audio) === "undefined") {
1124+ this.ting = {play: function() {}};
1125+ return;
1126+ }
1127 this.ting = new Audio(new Audio().canPlayType("audio/ogg; codecs=vorbis") ?
1128 require.toUrl("../audio/Ting.ogg") :
1129 require.toUrl("../audio/Ting.mp3")
1130@@ -395,6 +399,9 @@
1131 return;
1132 }
1133 var mes = this.$("input").val();
1134+ if (! mes.trim()) {
1135+ return;
1136+ }
1137 this.$("input").val("");
1138 var send_it = _.bind(function() {
1139 var model = connection.getModel("im.message");
1140
1141=== modified file 'l10n_ca/__openerp__.py'
1142--- l10n_ca/__openerp__.py 2012-12-06 21:54:24 +0000
1143+++ l10n_ca/__openerp__.py 2013-06-06 12:58:46 +0000
1144@@ -20,7 +20,7 @@
1145 ##############################################################################
1146 {
1147 'name': 'Canada - Accounting',
1148- 'version': '1.0',
1149+ 'version': '1.1',
1150 'author': 'Savoir-faire Linux',
1151 'website': 'http://www.savoirfairelinux.com',
1152 'category': 'Localization/Account Charts',
1153@@ -49,7 +49,7 @@
1154 'account_chart_template_fr.xml',
1155 'account_tax_fr.xml',
1156 'fiscal_templates_fr.xml',
1157- 'l10n_ca_wizard.xml',
1158+ 'l10n_ca_wizard.xml'
1159 ],
1160 'demo': [],
1161 'installable': True,
1162
1163=== modified file 'l10n_ca/account_tax_en.xml'
1164--- l10n_ca/account_tax_en.xml 2012-12-06 21:54:24 +0000
1165+++ l10n_ca/account_tax_en.xml 2013-06-06 12:58:46 +0000
1166@@ -12,7 +12,6 @@
1167 <field name="description">GSTPST_MB_SALE</field>
1168 <field name="type_tax_use">sale</field>
1169 <field name="amount">1</field>
1170- <field name="child_depend">1</field>
1171 <field name="type">percent</field>
1172 </record>
1173
1174@@ -39,7 +38,7 @@
1175 <field name="name">PST for sales - 7%</field>
1176 <field name="description">PST</field>
1177 <field name="type_tax_use">sale</field>
1178- <field name="amount">0.700000</field>
1179+ <field name="amount">0.070000</field>
1180 <field name="type">percent</field>
1181 <field name="sequence">2</field>
1182 <field name="account_collected_id" ref="chart2132_en"/>
1183@@ -106,7 +105,6 @@
1184 <field name="description">GSTTVQ_SALE</field>
1185 <field name="type_tax_use">sale</field>
1186 <field name="amount">1</field>
1187- <field name="child_depend">1</field>
1188 <field name="type">percent</field>
1189 </record>
1190
1191@@ -152,7 +150,6 @@
1192 <field name="description">GSTPST_SK_SALE</field>
1193 <field name="type_tax_use">sale</field>
1194 <field name="amount">1</field>
1195- <field name="child_depend">1</field>
1196 <field name="type">percent</field>
1197 </record>
1198
1199@@ -281,7 +278,6 @@
1200 <field name="description">GSTPST_MB_PURC</field>
1201 <field name="type_tax_use">purchase</field>
1202 <field name="amount">1</field>
1203- <field name="child_depend">1</field>
1204 <field name="type">percent</field>
1205 </record>
1206
1207@@ -308,7 +304,7 @@
1208 <field name="name">PST for purchases - 7%</field>
1209 <field name="description">PST</field>
1210 <field name="type_tax_use">purchase</field>
1211- <field name="amount">0.700000</field>
1212+ <field name="amount">0.070000</field>
1213 <field name="type">percent</field>
1214 <field name="sequence">2</field>
1215 <field name="account_collected_id" ref="chart1182_en"/>
1216@@ -375,7 +371,6 @@
1217 <field name="description">GSTTVQ_PURC</field>
1218 <field name="type_tax_use">purchase</field>
1219 <field name="amount">1</field>
1220- <field name="child_depend">1</field>
1221 <field name="type">percent</field>
1222 </record>
1223
1224@@ -421,7 +416,6 @@
1225 <field name="description">GSTPST_SK_PURC</field>
1226 <field name="type_tax_use">purchase</field>
1227 <field name="amount">1</field>
1228- <field name="child_depend">1</field>
1229 <field name="type">percent</field>
1230 </record>
1231
1232
1233=== modified file 'l10n_ca/account_tax_fr.xml'
1234--- l10n_ca/account_tax_fr.xml 2012-12-06 21:54:24 +0000
1235+++ l10n_ca/account_tax_fr.xml 2013-06-06 12:58:46 +0000
1236@@ -12,7 +12,6 @@
1237 <field name="description">TPSTVP_MB_SALE</field>
1238 <field name="type_tax_use">sale</field>
1239 <field name="amount">1</field>
1240- <field name="child_depend">1</field>
1241 <field name="type">percent</field>
1242 </record>
1243
1244@@ -39,7 +38,7 @@
1245 <field name="name">TVP sur les ventes - 7%</field>
1246 <field name="description">TVP</field>
1247 <field name="type_tax_use">sale</field>
1248- <field name="amount">0.700000</field>
1249+ <field name="amount">0.070000</field>
1250 <field name="type">percent</field>
1251 <field name="sequence">2</field>
1252 <field name="account_collected_id" ref="chart2132_fr"/>
1253@@ -106,7 +105,6 @@
1254 <field name="description">TPSTVQ_SALE</field>
1255 <field name="type_tax_use">sale</field>
1256 <field name="amount">1</field>
1257- <field name="child_depend">1</field>
1258 <field name="type">percent</field>
1259 </record>
1260
1261@@ -152,7 +150,6 @@
1262 <field name="description">TPSTVP_SK_SALE</field>
1263 <field name="type_tax_use">sale</field>
1264 <field name="amount">1</field>
1265- <field name="child_depend">1</field>
1266 <field name="type">percent</field>
1267 </record>
1268
1269@@ -281,7 +278,6 @@
1270 <field name="description">TPSTVP_MB_PURC</field>
1271 <field name="type_tax_use">purchase</field>
1272 <field name="amount">1</field>
1273- <field name="child_depend">1</field>
1274 <field name="type">percent</field>
1275 </record>
1276
1277@@ -308,7 +304,7 @@
1278 <field name="name">TVP sur les achats - 7%</field>
1279 <field name="description">TVP</field>
1280 <field name="type_tax_use">purchase</field>
1281- <field name="amount">0.700000</field>
1282+ <field name="amount">0.070000</field>
1283 <field name="type">percent</field>
1284 <field name="sequence">2</field>
1285 <field name="account_collected_id" ref="chart1182_fr"/>
1286@@ -375,7 +371,6 @@
1287 <field name="description">TPSTVQ_PURC</field>
1288 <field name="type_tax_use">purchase</field>
1289 <field name="amount">1</field>
1290- <field name="child_depend">1</field>
1291 <field name="type">percent</field>
1292 </record>
1293
1294@@ -421,7 +416,6 @@
1295 <field name="description">TPSTVP_SK_PURC</field>
1296 <field name="type_tax_use">purchase</field>
1297 <field name="amount">1</field>
1298- <field name="child_depend">1</field>
1299 <field name="type">percent</field>
1300 </record>
1301
1302
1303=== modified file 'l10n_ca/fiscal_templates_en.xml'
1304--- l10n_ca/fiscal_templates_en.xml 2012-08-02 13:40:12 +0000
1305+++ l10n_ca/fiscal_templates_en.xml 2013-06-06 12:58:46 +0000
1306@@ -5,17 +5,17 @@
1307 <!-- Fiscal Position Templates -->
1308
1309 <record id="fiscal_position_template_1_en" model="account.fiscal.position.template">
1310- <field name="name">Provincial Regime</field>
1311+ <field name="name">Provincial Regime (PROV)</field>
1312 <field name="chart_template_id" ref="ca_en_chart_template_en"/>
1313 </record>
1314
1315 <record id="fiscal_position_template_21_en" model="account.fiscal.position.template">
1316- <field name="name">Harmonized Provinces Regime (12%)</field>
1317+ <field name="name">Harmonized Provinces Regime (12%) (BC)</field>
1318 <field name="chart_template_id" ref="ca_en_chart_template_en"/>
1319 </record>
1320
1321 <record id="fiscal_position_template_22_en" model="account.fiscal.position.template">
1322- <field name="name">Harmonized Provinces Regime (13%)</field>
1323+ <field name="name">Harmonized Provinces Regime (13%) (ON, NB, NL)</field>
1324 <field name="chart_template_id" ref="ca_en_chart_template_en"/>
1325 </record>
1326
1327@@ -25,17 +25,17 @@
1328 </record>
1329
1330 <record id="fiscal_position_template_24_en" model="account.fiscal.position.template">
1331- <field name="name">Harmonized Provinces Regime (15%)</field>
1332+ <field name="name">Harmonized Provinces Regime (15%) (NS)</field>
1333 <field name="chart_template_id" ref="ca_en_chart_template_en"/>
1334 </record>
1335
1336 <record id="fiscal_position_template_3_en" model="account.fiscal.position.template">
1337- <field name="name">Non-Harmonized Provinces Regime</field>
1338+ <field name="name">Non-Harmonized Provinces Regime (AB, MB, SK, PE, NT, NU, YT)</field>
1339 <field name="chart_template_id" ref="ca_en_chart_template_en"/>
1340 </record>
1341
1342 <record id="fiscal_position_template_4_en" model="account.fiscal.position.template">
1343- <field name="name">International Regime</field>
1344+ <field name="name">International Regime (INTL)</field>
1345 <field name="chart_template_id" ref="ca_en_chart_template_en"/>
1346 </record>
1347
1348
1349=== modified file 'l10n_ca/fiscal_templates_fr.xml'
1350--- l10n_ca/fiscal_templates_fr.xml 2012-12-06 21:54:24 +0000
1351+++ l10n_ca/fiscal_templates_fr.xml 2013-06-06 12:58:46 +0000
1352@@ -5,7 +5,7 @@
1353 <!-- Fiscal Position Templates -->
1354
1355 <record id="fiscal_position_template_1_fr" model="account.fiscal.position.template">
1356- <field name="name">Régime Provincial</field>
1357+ <field name="name">Régime Provincial (PROV)</field>
1358 <field name="chart_template_id" ref="ca_fr_chart_template_fr"/>
1359 </record>
1360
1361@@ -30,12 +30,12 @@
1362 </record>
1363
1364 <record id="fiscal_position_template_3_fr" model="account.fiscal.position.template">
1365- <field name="name">Régime Provinces Non-Harmonisées</field>
1366+ <field name="name">Régime Provinces Non-Harmonisées (AB, MB, SK, PE, NT, NU, YT)</field>
1367 <field name="chart_template_id" ref="ca_fr_chart_template_fr"/>
1368 </record>
1369
1370 <record id="fiscal_position_template_4_fr" model="account.fiscal.position.template">
1371- <field name="name">Régime International</field>
1372+ <field name="name">Régime International (INTL)</field>
1373 <field name="chart_template_id" ref="ca_fr_chart_template_fr"/>
1374 </record>
1375
1376
1377=== modified file 'l10n_it/__openerp__.py'
1378--- l10n_it/__openerp__.py 2012-11-29 22:26:45 +0000
1379+++ l10n_it/__openerp__.py 2013-06-06 12:58:46 +0000
1380@@ -29,7 +29,7 @@
1381
1382 {
1383 'name': 'Italy - Accounting',
1384- 'version': '0.1',
1385+ 'version': '0.2',
1386 'depends': ['base_vat','account_chart','base_iban'],
1387 'author': 'OpenERP Italian Community',
1388 'description': """
1389
1390=== modified file 'l10n_it/data/account.tax.code.template.csv'
1391--- l10n_it/data/account.tax.code.template.csv 2012-12-20 10:21:30 +0000
1392+++ l10n_it/data/account.tax.code.template.csv 2013-06-06 12:58:46 +0000
1393@@ -1,28 +1,37 @@
1394 code,id,name,parent_id:id
1395 ,vat_code_chart_root,Tassazione,
1396 IVC,template_ivacode_pagata,IVA a credito,vat_code_chart_root
1397-IVC0,template_ivacode_pagata_0,Esente IVA (credito),template_ivacode_pagata
1398+IVCN,template_ivacode_pagata_ind,IVA a credito indetraibile,vat_code_chart_root
1399+IVC0,template_ivacode_pagata_0,Fuori Campo IVA (credito),template_ivacode_pagata
1400 IVCI,template_impcode_pagata,IVA a credito (imponibile),vat_code_chart_root
1401-IVC0I,template_impcode_pagata_0,Esente IVA a credito (imponibile),template_impcode_pagata
1402+IVC0I,template_impcode_pagata_0,Fuori Campo IVA (credito) (imponibile),template_impcode_pagata
1403+IVCart15,template_ivacode_pagata_art15,Escluso Art.15 (credito),template_ivacode_pagata
1404+IVCart15I,template_impcode_pagata_art15,Escluso Art.15. (credito) (imponibile),template_impcode_pagata
1405 IVC10,template_ivacode_pagata_10,IVA a credito 10%,template_ivacode_pagata
1406 IVC10I,template_impcode_pagata_10,IVA a credito 10% (imponibile),template_impcode_pagata
1407-IVC10ind,template_ivacode_pagata_10ind,IVA a credito 10% indetraibile,template_ivacode_pagata
1408+IVC10ind,template_ivacode_pagata_10ind,IVA a credito 10% indetraibile,template_ivacode_pagata_ind
1409 IVC10Iind,template_impcode_pagata_10ind,IVA a credito 10% indetraibile (imponibile),template_impcode_pagata
1410-IVC20ind,template_ivacode_pagata_20ind,IVA a credito 20% indetraibile,template_ivacode_pagata
1411+IVC20ind,template_ivacode_pagata_20ind,IVA a credito 20% indetraibile,template_ivacode_pagata_ind
1412 IVC20Iind,template_impcode_pagata_20ind,IVA a credito 20% indetraibile (imponibile),template_impcode_pagata
1413-IVC4ind,template_ivacode_pagata_4ind,IVA a credito 4% indetraibile,template_ivacode_pagata
1414+IVC4ind,template_ivacode_pagata_4ind,IVA a credito 4% indetraibile,template_ivacode_pagata_ind
1415 IVC4Iind,template_impcode_pagata_4ind,IVA a credito 4% indetraibile (imponibile),template_impcode_pagata
1416 IVC20det10,template_ivacode_pagata_20det10,IVA a credito 20% detraibile 10%,template_ivacode_pagata
1417+IVC20Ndet10,template_ivacode_pagata_20det10ind,IVA a credito 20% detraibile 10% (indetraibile),template_ivacode_pagata_ind
1418 IVC20Idet10,template_impcode_pagata_20det10,IVA a credito 20% detraibile 10% (imponibile),template_impcode_pagata
1419 IVC20det15,template_ivacode_pagata_20det15,IVA a credito 20% detraibile 15%,template_ivacode_pagata
1420+IVC20Ndet15,template_ivacode_pagata_20det15ind,IVA a credito 20% detraibile 15% (indetraibile),template_ivacode_pagata_ind
1421 IVC20Idet15,template_impcode_pagata_20det15,IVA a credito 20% detraibile 15% (imponibile),template_impcode_pagata
1422 IVC20det40,template_ivacode_pagata_20det40,IVA a credito 20% detraibile 40%,template_ivacode_pagata
1423+IVC20Ndet40,template_ivacode_pagata_20det40ind,IVA a credito 20% detraibile 40% (indetraibile),template_ivacode_pagata_ind
1424 IVC20Idet40,template_impcode_pagata_20det40,IVA a credito 20% detraibile 40% (imponibile),template_impcode_pagata
1425 IVC20det50,template_ivacode_pagata_20det50,IVA a credito 20% detraibile 50%,template_ivacode_pagata
1426+IVC20Ndet50,template_ivacode_pagata_20det50ind,IVA a credito 20% detraibile 50% (indetraibile),template_ivacode_pagata_ind
1427 IVC20Idet50,template_impcode_pagata_20det50,IVA a credito 20% detraibile 50% (imponibile),template_impcode_pagata
1428 IVC10det50,template_ivacode_pagata_10det50,IVA a credito 10% detraibile 50%,template_ivacode_pagata
1429+IVC10Ndet50,template_ivacode_pagata_10det50ind,IVA a credito 10% detraibile 50% (indetraibile),template_ivacode_pagata_ind
1430 IVC10Idet50,template_impcode_pagata_10det50,IVA a credito 10% detraibile 50% (imponibile),template_impcode_pagata
1431 IVC4det50,template_ivacode_pagata_4det50,IVA a credito 4% detraibile 50%,template_ivacode_pagata
1432+IVC4Ndet50,template_ivacode_pagata_4det50ind,IVA a credito 4% detraibile 50% (indetraibile),template_ivacode_pagata_ind
1433 IVC4Idet50,template_impcode_pagata_4det50,IVA a credito 4% detraibile 50% (imponibile),template_impcode_pagata
1434 IVC20,template_ivacode_pagata_20,IVA a credito 20%,template_ivacode_pagata
1435 IVC20I,template_impcode_pagata_20,IVA a credito 20% (imponibile),template_impcode_pagata
1436@@ -35,9 +44,11 @@
1437 IVC2,template_ivacode_pagata_2,IVA a credito 2%,template_ivacode_pagata
1438 IVC2I,template_impcode_pagata_2,IVA a credito 2% (imponibile),template_impcode_pagata
1439 IVD,template_ivacode_riscossa,IVA a debito,vat_code_chart_root
1440-IVD0,template_ivacode_riscossa_0,Esente IVA (debito),template_ivacode_riscossa
1441+IVD0,template_ivacode_riscossa_0,Fuori Campo IVA (debito),template_ivacode_riscossa
1442 IVDI,template_impcode_riscossa,IVA a debito (imponibile),vat_code_chart_root
1443-IVD0I,template_impcode_riscossa_0,Esente IVA a debito (imponibile),template_impcode_riscossa
1444+IVD0I,template_impcode_riscossa_0,Fuori Campo IVA (debito) (imponibile),template_impcode_riscossa
1445+IVDart15,template_ivacode_riscossa_art15,Escluso Art.15 (debito),template_ivacode_riscossa
1446+IVDart15I,template_impcode_riscossa_art15,Escluso Art.15 (debito) (imponibile),template_impcode_riscossa
1447 IVD10,template_ivacode_riscossa_10,IVA a debito 10%,template_ivacode_riscossa
1448 IVD10I,template_impcode_riscossa_10,IVA a debito 10% (imponibile),template_impcode_riscossa
1449 IVD20,template_ivacode_riscossa_20,IVA a debito 20%,template_ivacode_riscossa
1450@@ -50,13 +61,17 @@
1451 IVD12I,template_impcode_riscossa_12,IVA a debito 12% (imponibile),template_impcode_riscossa
1452 IVD2,template_ivacode_riscossa_2,IVA a debito 2%,template_ivacode_riscossa
1453 IVD2I,template_impcode_riscossa_2,IVA a debito 2% (imponibile),template_impcode_riscossa
1454-IVC21ind,template_ivacode_pagata_21ind,IVA a credito 21% indetraibile,template_ivacode_pagata
1455+IVC21ind,template_ivacode_pagata_21ind,IVA a credito 21% indetraibile,template_ivacode_pagata_ind
1456 IVC21Iind,template_impcode_pagata_21ind,IVA a credito 21% indetraibile (imponibile),template_impcode_pagata
1457 IVC21det10,template_ivacode_pagata_21det10,IVA a credito 21% detraibile 10%,template_ivacode_pagata
1458+IVC21Ndet10,template_ivacode_pagata_21det10ind,IVA a credito 21% detraibile 10% (indetraibile),template_ivacode_pagata_ind
1459 IVC21Idet10,template_impcode_pagata_21det10,IVA a credito 21% detraibile 10% (imponibile),template_impcode_pagata
1460 IVC21det15,template_ivacode_pagata_21det15,IVA a credito 21% detraibile 15%,template_ivacode_pagata
1461+IVC21Ndet15,template_ivacode_pagata_21det15ind,IVA a credito 21% detraibile 15% (indetraibile),template_ivacode_pagata_ind
1462 IVC21Idet15,template_impcode_pagata_21det15,IVA a credito 21% detraibile 15% (imponibile),template_impcode_pagata
1463 IVC21det40,template_ivacode_pagata_21det40,IVA a credito 21% detraibile 40%,template_ivacode_pagata
1464+IVC21Ndet40,template_ivacode_pagata_21det40ind,IVA a credito 21% detraibile 40% (indetraibile),template_ivacode_pagata_ind
1465 IVC21Idet40,template_impcode_pagata_21det40,IVA a credito 21% detraibile 40% (imponibile),template_impcode_pagata
1466 IVC21det50,template_ivacode_pagata_21det50,IVA a credito 21% detraibile 50%,template_ivacode_pagata
1467+IVC21Ndet50,template_ivacode_pagata_21det50ind,IVA a credito 21% detraibile 50% (indetraibile),template_ivacode_pagata_ind
1468 IVC21Idet50,template_impcode_pagata_21det50,IVA a credito 21% detraibile 50% (imponibile),template_impcode_pagata
1469
1470=== modified file 'l10n_it/data/account.tax.template.csv'
1471--- l10n_it/data/account.tax.template.csv 2012-12-20 10:21:30 +0000
1472+++ l10n_it/data/account.tax.template.csv 2013-06-06 12:58:46 +0000
1473@@ -1,71 +1,66 @@
1474 id,description,chart_template_id:id,name,sequence,amount,parent_id:id,child_depend,type,account_collected_id:id,account_paid_id:id,type_tax_use,base_code_id:id,tax_code_id:id,ref_base_code_id:id,ref_tax_code_id:id,ref_base_sign,ref_tax_sign,price_include,base_sign,tax_sign
1475-21a,21a,l10n_it_chart_template_generic,Iva al 21% (debito),,0.21,,False,percent,2601,2601,sale,template_impcode_riscossa_21,template_ivacode_riscossa_21,template_impcode_riscossa_21,template_ivacode_riscossa_21,-1,-1,False,,
1476-21b,21b,l10n_it_chart_template_generic,Iva al 21% (credito),,0.21,,False,percent,1601,1601,purchase,template_impcode_pagata_21,template_ivacode_pagata_21,template_impcode_pagata_21,template_ivacode_pagata_21,,,False,-1,-1
1477-20a,20a,l10n_it_chart_template_generic,Iva al 20% (debito),,0.2,,False,percent,2601,2601,sale,template_impcode_riscossa_20,template_ivacode_riscossa_20,template_impcode_riscossa_20,template_ivacode_riscossa_20,-1,-1,False,,
1478-20b,20b,l10n_it_chart_template_generic,Iva al 20% (credito),,0.2,,False,percent,1601,1601,purchase,template_impcode_pagata_20,template_ivacode_pagata_20,template_impcode_pagata_20,template_ivacode_pagata_20,,,False,-1,-1
1479-10a,10a,l10n_it_chart_template_generic,Iva al 10% (debito),,0.1,,False,percent,2601,2601,sale,template_impcode_riscossa_10,template_ivacode_riscossa_10,template_impcode_riscossa_10,template_ivacode_riscossa_10,-1,-1,False,,
1480-10b,10b,l10n_it_chart_template_generic,Iva al 10% (credito),,0.1,,False,percent,1601,1601,purchase,template_impcode_pagata_10,template_ivacode_pagata_10,template_impcode_pagata_10,template_ivacode_pagata_10,,,False,-1,-1
1481-10AO,10AO,l10n_it_chart_template_generic,Iva al 10% indetraibile,,0.1,,True,percent,,,purchase,template_impcode_pagata_10ind,,template_impcode_pagata_10ind,,,,False,-1,-1
1482-10AOa,10AOa,l10n_it_chart_template_generic,Iva al 10% indetraibile (D),2,0,10AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_10ind,,template_ivacode_pagata_10ind,,,False,,
1483-10AOb,10AOb,l10n_it_chart_template_generic,Iva al 10% indetraibile (I),1,1,10AO,False,percent,,,purchase,,,,,,,False,,
1484-12a,12a,l10n_it_chart_template_generic,Iva 12% (debito),,0.12,,False,percent,2601,2601,sale,template_impcode_riscossa_12,template_ivacode_riscossa_12,template_impcode_riscossa_12,template_ivacode_riscossa_12,-1,-1,False,,
1485-12b,12b,l10n_it_chart_template_generic,Iva 12% (credito),,0.12,,False,percent,1601,1601,purchase,template_impcode_pagata_12,template_ivacode_pagata_12,template_impcode_pagata_12,template_ivacode_pagata_12,,,False,-1,-1
1486-2010,2010,l10n_it_chart_template_generic,Iva al 20% detraibile 10%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det10,,template_impcode_pagata_20det10,,,,False,-1,-1
1487-2010a,2010a,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (D),2,0,2010,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det10,,template_ivacode_pagata_20det10,,,False,,
1488-2010b,2010b,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (I),1,0.9,2010,False,percent,,,purchase,,,,,,,False,,
1489-2015,2015,l10n_it_chart_template_generic,Iva al 20% detraibile 15%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det15,,template_impcode_pagata_20det15,,,,False,-1,-1
1490-2015a,2015a,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (D),2,0,2015,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det15,,template_ivacode_pagata_20det15,,,False,,
1491-2015b,2015b,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (I),1,0.85,2015,False,percent,,,purchase,,,,,,,False,,
1492-2040,2040,l10n_it_chart_template_generic,Iva al 20% detraibile 40%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det40,,template_impcode_pagata_20det40,,,,False,-1,-1
1493-2040a,2040a,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (D),2,0,2040,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det40,,template_ivacode_pagata_20det40,,,False,,
1494-2040b,2040b,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (I),1,0.6,2040,False,percent,,,purchase,,,,,,,False,,
1495-20AO,20AO,l10n_it_chart_template_generic,Iva al 20% indetraibile,,0.2,,True,percent,,,purchase,template_impcode_pagata_20ind,,template_impcode_pagata_20ind,,,,False,-1,-1
1496-20AOa,20AOa,l10n_it_chart_template_generic,Iva al 20% indetraibile (D),2,0,20AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_20ind,,template_ivacode_pagata_20ind,,,False,,
1497-20AOb,20AOb,l10n_it_chart_template_generic,Iva al 20% indetraibile (I),1,1,20AO,False,percent,,,purchase,,,,,,,False,,
1498-20I5,20I5,l10n_it_chart_template_generic,IVA al 20% detraibile al 50%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det50,,template_impcode_pagata_20det50,,,,False,-1,-1
1499-20I5b,20I5b,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (I),1,0.5,20I5,False,percent,,,purchase,,,,,,,False,,
1500-20I5a,20I5a,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (D),2,0,20I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det50,,template_ivacode_pagata_20det50,,,False,,
1501-22a,22a,l10n_it_chart_template_generic,Iva 2% (debito),,0.02,,False,percent,2601,2601,sale,template_impcode_riscossa_2,template_ivacode_riscossa_2,template_impcode_riscossa_2,template_ivacode_riscossa_2,-1,-1,False,,
1502-22b,22b,l10n_it_chart_template_generic,Iva 2% (credito),,0.02,,False,percent,1601,1601,purchase,template_impcode_pagata_2,template_ivacode_pagata_2,template_impcode_pagata_2,template_ivacode_pagata_2,,,False,-1,-1
1503-4a,4a,l10n_it_chart_template_generic,Iva 4% (debito),,0.04,,False,percent,2601,2601,sale,template_impcode_riscossa_4,template_ivacode_riscossa_4,template_impcode_riscossa_4,template_ivacode_riscossa_4,-1,-1,False,,
1504-4b,4b,l10n_it_chart_template_generic,Iva 4% (credito),,0.04,,False,percent,1601,1601,purchase,template_impcode_pagata_4,template_ivacode_pagata_4,template_impcode_pagata_4,template_ivacode_pagata_4,,,False,-1,-1
1505-4AO,4AO,l10n_it_chart_template_generic,Iva al 4% indetraibile,,0.04,,True,percent,,,purchase,template_impcode_pagata_4ind,,template_impcode_pagata_4ind,,,,False,-1,-1
1506-4AOa,4AOa,l10n_it_chart_template_generic,Iva al 4% indetraibile (D),2,0,4AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_4ind,,template_ivacode_pagata_4ind,,,False,,
1507-4AOb,4AOb,l10n_it_chart_template_generic,Iva al 4% indetraibile (I),1,1,4AO,False,percent,,,purchase,,,,,,,False,,
1508-10I5,10I5,l10n_it_chart_template_generic,IVA al 10% detraibile al 50%,,0.1,,True,percent,,,purchase,template_impcode_pagata_10det50,,template_impcode_pagata_10det50,,,,False,-1,-1
1509-10I5a,10I5a,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (D),2,0,10I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_10det50,,template_ivacode_pagata_10det50,,,False,,
1510-10I5b,10I5b,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (I),1,0.5,10I5,False,percent,,,purchase,,,,,,,False,,
1511-4I5,4I5,l10n_it_chart_template_generic,IVA al 4% detraibile al 50%,,0.04,,True,percent,,,purchase,template_impcode_pagata_4det50,,template_impcode_pagata_4det50,,,,False,-1,-1
1512-4I5a,4I5a,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (D),2,0,4I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_4det50,,template_ivacode_pagata_4det50,,,False,,
1513-4I5b,4I5b,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (I),1,0.5,4I5,False,percent,,,purchase,,,,,,,False,,
1514-00a,00a,l10n_it_chart_template_generic,Esente IVA (debito),,0,,False,percent,2601,2601,sale,template_impcode_riscossa_0,template_ivacode_riscossa_0,template_impcode_riscossa_0,template_ivacode_riscossa_0,-1,-1,False,,
1515-00b,00b,l10n_it_chart_template_generic,Esente IVA (credito),,0,,False,percent,1601,1601,purchase,template_impcode_pagata_0,template_ivacode_pagata_0,template_impcode_pagata_0,template_ivacode_pagata_0,,,False,-1,-1
1516-21a INC,21a INC,l10n_it_chart_template_generic,Iva al 21% (debito) INC,,0.21,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,-1,-1,True,,
1517-21b INC,21b INC,l10n_it_chart_template_generic,Iva al 21% (credito) INC,,0.21,,False,percent,1601,1601,purchase,template_impcode_pagata_21,template_ivacode_pagata_21,template_impcode_pagata_21,template_ivacode_pagata_21,,,True,-1,-1
1518-20a INC,20a INC,l10n_it_chart_template_generic,Iva al 20% (debito) INC,,0.2,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,-1,-1,True,,
1519-20b INC,20b INC,l10n_it_chart_template_generic,Iva al 20% (credito) INC,,0.2,,False,percent,1601,1601,purchase,template_impcode_pagata_20,template_ivacode_pagata_20,template_impcode_pagata_20,template_ivacode_pagata_20,,,True,-1,-1
1520-10a INC,10a INC,l10n_it_chart_template_generic,Iva al 10% (debito) INC,,0.1,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,-1,-1,True,,
1521-10b INC,10b INC,l10n_it_chart_template_generic,Iva al 10% (credito) INC,,0.1,,False,percent,1601,1601,purchase,template_impcode_pagata_10,template_ivacode_pagata_10,template_impcode_pagata_10,template_ivacode_pagata_10,,,True,-1,-1
1522-12a INC,12a INC,l10n_it_chart_template_generic,Iva 12% (debito) INC,,0.12,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,-1,-1,True,,
1523-12b INC,12b INC,l10n_it_chart_template_generic,Iva 12% (credito) INC,,0.12,,False,percent,1601,1601,purchase,template_impcode_pagata_12,template_ivacode_pagata_12,template_impcode_pagata_12,template_ivacode_pagata_12,,,True,-1,-1
1524-22a INC,22a INC,l10n_it_chart_template_generic,Iva 2% (debito) INC,,0.02,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,-1,-1,True,,
1525-22b INC,22b INC,l10n_it_chart_template_generic,Iva 2% (credito) INC,,0.02,,False,percent,1601,1601,purchase,template_impcode_pagata_2,template_ivacode_pagata_2,template_impcode_pagata_2,template_ivacode_pagata_2,,,True,-1,-1
1526-4a INC,4a INC,l10n_it_chart_template_generic,Iva 4% (debito) INC,,0.04,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,-1,-1,True,,
1527-4b INC,4b INC,l10n_it_chart_template_generic,Iva 4% (credito) INC,,0.04,,False,percent,1601,1601,purchase,template_impcode_pagata_4,template_ivacode_pagata_4,template_impcode_pagata_4,template_ivacode_pagata_4,,,True,-1,-1
1528-00a INC,00a INC,l10n_it_chart_template_generic,Esente IVA (debito) INC,,0,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,-1,-1,True,,
1529-2110,2110,l10n_it_chart_template_generic,Iva al 21% detraibile 10%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det10,,template_impcode_pagata_21det10,,,,False,-1,-1
1530-2110a,2110a,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (D),2,0,2110,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det10,,template_ivacode_pagata_21det10,,,False,,
1531-2110b,2110b,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (I),1,0.9,2110,False,percent,,,purchase,,,,,,,False,,
1532-2115,2115,l10n_it_chart_template_generic,Iva al 21% detraibile 15%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det15,,template_impcode_pagata_21det15,,,,False,-1,-1
1533-2115a,2115a,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (D),2,0,2115,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det15,,template_ivacode_pagata_21det15,,,False,,
1534-2115b,2115b,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (I),1,0.85,2115,False,percent,,,purchase,,,,,,,False,,
1535-2140,2140,l10n_it_chart_template_generic,Iva al 21% detraibile 40%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det40,,template_impcode_pagata_21det40,,,,False,-1,-1
1536-2140a,2140a,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (D),2,0,2140,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det40,,template_ivacode_pagata_21det40,,,False,,
1537-2140b,2140b,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (I),1,0.6,2140,False,percent,,,purchase,,,,,,,False,,
1538-21AO,21AO,l10n_it_chart_template_generic,Iva al 21% indetraibile,,0.21,,True,percent,,,purchase,template_impcode_pagata_21ind,,template_impcode_pagata_21ind,,,,False,-1,-1
1539-21AOa,21AOa,l10n_it_chart_template_generic,Iva al 21% indetraibile (D),2,0,21AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_21ind,,template_ivacode_pagata_21ind,,,False,,
1540-21AOb,21AOb,l10n_it_chart_template_generic,Iva al 21% indetraibile (I),1,1,21AO,False,percent,,,purchase,,,,,,,False,,
1541-21I5,21I5,l10n_it_chart_template_generic,IVA al 21% detraibile al 50%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det50,,template_impcode_pagata_21det50,,,,False,-1,-1
1542-21I5b,21I5b,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (I),1,0.5,21I5,False,percent,,,purchase,,,,,,,False,,
1543-21I5a,21I5a,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (D),2,0,21I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det50,,template_ivacode_pagata_21det50,,,False,,
1544-
1545+21v,21v,l10n_it_chart_template_generic,Iva al 21% (debito),1,0.21,,False,percent,2601,2601,sale,template_impcode_riscossa_21,template_ivacode_riscossa_21,template_impcode_riscossa_21,template_ivacode_riscossa_21,-1,-1,False,1,1
1546+21a,21a,l10n_it_chart_template_generic,Iva al 21% (credito),2,0.21,,False,percent,1601,1601,purchase,template_impcode_pagata_21,template_ivacode_pagata_21,template_impcode_pagata_21,template_ivacode_pagata_21,1,1,False,-1,-1
1547+20v,20v,l10n_it_chart_template_generic,Iva al 20% (debito),3,0.2,,False,percent,2601,2601,sale,template_impcode_riscossa_20,template_ivacode_riscossa_20,template_impcode_riscossa_20,template_ivacode_riscossa_20,-1,-1,False,1,1
1548+20a,20a,l10n_it_chart_template_generic,Iva al 20% (credito),4,0.2,,False,percent,1601,1601,purchase,template_impcode_pagata_20,template_ivacode_pagata_20,template_impcode_pagata_20,template_ivacode_pagata_20,1,1,False,-1,-1
1549+10v,10v,l10n_it_chart_template_generic,Iva al 10% (debito),5,0.1,,False,percent,2601,2601,sale,template_impcode_riscossa_10,template_ivacode_riscossa_10,template_impcode_riscossa_10,template_ivacode_riscossa_10,-1,-1,False,1,1
1550+10a,10a,l10n_it_chart_template_generic,Iva al 10% (credito),6,0.1,,False,percent,1601,1601,purchase,template_impcode_pagata_10,template_ivacode_pagata_10,template_impcode_pagata_10,template_ivacode_pagata_10,1,1,False,-1,-1
1551+10AO,10AO,l10n_it_chart_template_generic,Iva al 10% indetraibile,7,0.1,,True,percent,,,purchase,template_impcode_pagata_10ind,,template_impcode_pagata_10ind,,1,1,False,-1,-1
1552+10AOb,10AOb,l10n_it_chart_template_generic,Iva al 10% indetraibile (D),200,0,10AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_10,,template_ivacode_pagata_10,1,1,False,-1,-1
1553+10AOa,10AOa,l10n_it_chart_template_generic,Iva al 10% indetraibile (I),100,1,10AO,False,percent,,,purchase,,template_ivacode_pagata_10ind,,template_ivacode_pagata_10ind,1,1,False,-1,-1
1554+12v,12v,l10n_it_chart_template_generic,Iva 12% (debito),8,0.12,,False,percent,2601,2601,sale,template_impcode_riscossa_12,template_ivacode_riscossa_12,template_impcode_riscossa_12,template_ivacode_riscossa_12,-1,-1,False,1,1
1555+12a,12a,l10n_it_chart_template_generic,Iva 12% (credito),9,0.12,,False,percent,1601,1601,purchase,template_impcode_pagata_12,template_ivacode_pagata_12,template_impcode_pagata_12,template_ivacode_pagata_12,1,1,False,-1,-1
1556+2010,2010,l10n_it_chart_template_generic,Iva al 20% detraibile 10%,10,0.2,,True,percent,,,purchase,template_impcode_pagata_20det10,,template_impcode_pagata_20det10,,1,1,False,-1,-1
1557+2010b,2010b,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (D),200,0,2010,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det10,,template_ivacode_pagata_20det10,1,1,False,-1,-1
1558+2010a,2010a,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (I),100,0.9,2010,False,percent,,,purchase,,template_ivacode_pagata_20det10ind,,template_ivacode_pagata_20det10ind,1,1,False,-1,-1
1559+2015,2015,l10n_it_chart_template_generic,Iva al 20% detraibile 15%,11,0.2,,True,percent,,,purchase,template_impcode_pagata_20det15,,template_impcode_pagata_20det15,,1,1,False,-1,-1
1560+2015b,2015b,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (D),200,0,2015,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det15,,template_ivacode_pagata_20det15,1,1,False,-1,-1
1561+2015a,2015a,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (I),100,0.85,2015,False,percent,,,purchase,,template_ivacode_pagata_20det15ind,,template_ivacode_pagata_20det15ind,1,1,False,-1,-1
1562+2040,2040,l10n_it_chart_template_generic,Iva al 20% detraibile 40%,12,0.2,,True,percent,,,purchase,template_impcode_pagata_20det40,,template_impcode_pagata_20det40,,1,1,False,-1,-1
1563+2040b,2040b,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (D),200,0,2040,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det40,,template_ivacode_pagata_20det40,1,1,False,-1,-1
1564+2040a,2040a,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (I),100,0.6,2040,False,percent,,,purchase,,template_ivacode_pagata_20det40ind,,template_ivacode_pagata_20det40ind,1,1,False,-1,-1
1565+20AO,20AO,l10n_it_chart_template_generic,Iva al 20% indetraibile,13,0.2,,True,percent,,,purchase,template_impcode_pagata_20ind,,template_impcode_pagata_20ind,,1,1,False,-1,-1
1566+20AOb,20AOb,l10n_it_chart_template_generic,Iva al 20% indetraibile (D),200,0,20AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_20ind,,template_ivacode_pagata_20ind,1,1,False,-1,-1
1567+20AOa,20AOa,l10n_it_chart_template_generic,Iva al 20% indetraibile (I),100,1,20AO,False,percent,,,purchase,,template_ivacode_pagata_20ind,,template_ivacode_pagata_20ind,1,1,False,-1,-1
1568+20I5,20I5,l10n_it_chart_template_generic,IVA al 20% detraibile al 50%,14,0.2,,True,percent,,,purchase,template_impcode_pagata_20det50,,template_impcode_pagata_20det50,,1,1,False,-1,-1
1569+20I5b,20I5b,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (D),200,0,20I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det50,,template_ivacode_pagata_20det50,1,1,False,-1,-1
1570+20I5a,20I5a,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (I),100,0.5,20I5,False,percent,,,purchase,,template_ivacode_pagata_20det50ind,,template_ivacode_pagata_20det50ind,1,1,False,-1,-1
1571+22v,22v,l10n_it_chart_template_generic,Iva 2% (debito),15,0.02,,False,percent,2601,2601,sale,template_impcode_riscossa_2,template_ivacode_riscossa_2,template_impcode_riscossa_2,template_ivacode_riscossa_2,-1,-1,False,1,1
1572+22a,22a,l10n_it_chart_template_generic,Iva 2% (credito),16,0.02,,False,percent,1601,1601,purchase,template_impcode_pagata_2,template_ivacode_pagata_2,template_impcode_pagata_2,template_ivacode_pagata_2,1,1,False,-1,-1
1573+4v,4v,l10n_it_chart_template_generic,Iva 4% (debito),17,0.04,,False,percent,2601,2601,sale,template_impcode_riscossa_4,template_ivacode_riscossa_4,template_impcode_riscossa_4,template_ivacode_riscossa_4,-1,-1,False,1,1
1574+4a,4a,l10n_it_chart_template_generic,Iva 4% (credito),18,0.04,,False,percent,1601,1601,purchase,template_impcode_pagata_4,template_ivacode_pagata_4,template_impcode_pagata_4,template_ivacode_pagata_4,1,1,False,-1,-1
1575+4AO,4AO,l10n_it_chart_template_generic,Iva al 4% indetraibile,19,0.04,,True,percent,,,purchase,template_impcode_pagata_4ind,,template_impcode_pagata_4ind,,1,1,False,-1,-1
1576+4AOb,4AOb,l10n_it_chart_template_generic,Iva al 4% indetraibile (D),200,0,4AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_4ind,,template_ivacode_pagata_4ind,1,1,False,-1,-1
1577+4AOa,4AOa,l10n_it_chart_template_generic,Iva al 4% indetraibile (I),100,1,4AO,False,percent,,,purchase,,template_ivacode_pagata_4ind,,template_ivacode_pagata_4ind,1,1,False,-1,-1
1578+10I5,10I5,l10n_it_chart_template_generic,IVA al 10% detraibile al 50%,20,0.1,,True,percent,,,purchase,template_impcode_pagata_10det50,,template_impcode_pagata_10det50,,1,1,False,-1,-1
1579+10I5b,10I5b,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (D),200,0,10I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_10det50,,template_ivacode_pagata_10det50,1,1,False,-1,-1
1580+10I5a,10I5a,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (I),100,0.5,10I5,False,percent,,,purchase,,template_ivacode_pagata_10det50ind,,template_ivacode_pagata_10det50ind,1,1,False,-1,-1
1581+4I5,4I5,l10n_it_chart_template_generic,IVA al 4% detraibile al 50%,21,0.04,,True,percent,,,purchase,template_impcode_pagata_4det50,,template_impcode_pagata_4det50,,1,1,False,-1,-1
1582+4I5b,4I5b,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (D),200,0,4I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_4det50,,template_ivacode_pagata_4det50,1,1,False,-1,-1
1583+4I5a,4I5a,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (I),100,0.5,4I5,False,percent,,,purchase,,template_ivacode_pagata_4det50ind,,template_ivacode_pagata_4det50ind,1,1,False,-1,-1
1584+00v,00v,l10n_it_chart_template_generic,Fuori Campo IVA (debito),22,0,,False,percent,2601,2601,sale,template_impcode_riscossa_0,template_ivacode_riscossa_0,template_impcode_riscossa_0,template_ivacode_riscossa_0,-1,-1,False,1,1
1585+00a,00a,l10n_it_chart_template_generic,Fuori Campo IVA (credito),23,0,,False,percent,1601,1601,purchase,template_impcode_pagata_0,template_ivacode_pagata_0,template_impcode_pagata_0,template_ivacode_pagata_0,1,1,False,-1,-1
1586+00art15v,00art15v,l10n_it_chart_template_generic,Imponibile Escluso Art.15 (debito),22,0,,False,percent,2601,2601,sale,template_impcode_riscossa_art15,template_ivacode_riscossa_art15,template_impcode_riscossa_art15,template_ivacode_riscossa_art15,-1,-1,False,1,1
1587+00art15a,00art15a,l10n_it_chart_template_generic,Imponibile Escluso Art.15 (credito),23,0,,False,percent,1601,1601,purchase,template_impcode_pagata_art15,template_ivacode_pagata_art15,template_impcode_pagata_art15,template_ivacode_pagata_art15,1,1,False,-1,-1
1588+21v INC,21v INC,l10n_it_chart_template_generic,Iva al 21% (debito) INC,24,0.21,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,-1,-1,True,1,1
1589+20v INC,20v INC,l10n_it_chart_template_generic,Iva al 20% (debito) INC,25,0.2,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,-1,-1,True,1,1
1590+10v INC,10v INC,l10n_it_chart_template_generic,Iva al 10% (debito) INC,26,0.1,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,-1,-1,True,1,1
1591+12v INC,12v INC,l10n_it_chart_template_generic,Iva 12% (debito) INC,27,0.12,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,-1,-1,True,1,1
1592+22v INC,22v INC,l10n_it_chart_template_generic,Iva 2% (debito) INC,28,0.02,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,-1,-1,True,1,1
1593+4v INC,4v INC,l10n_it_chart_template_generic,Iva 4% (debito) INC,29,0.04,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,-1,-1,True,1,1
1594+00v INC,00v INC,l10n_it_chart_template_generic,Fuori Campo IVA (debito) INC,30,0,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,-1,-1,True,1,1
1595+2110,2110,l10n_it_chart_template_generic,Iva al 21% detraibile 10%,31,0.21,,True,percent,,,purchase,template_impcode_pagata_21det10,,template_impcode_pagata_21det10,,1,1,False,-1,-1
1596+2110b,2110b,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (D),200,0,2110,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det10,,template_ivacode_pagata_21det10,1,1,False,-1,-1
1597+2110a,2110a,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (I),100,0.9,2110,False,percent,,,purchase,,template_ivacode_pagata_21det10ind,,template_ivacode_pagata_21det10ind,1,1,False,-1,-1
1598+2115,2115,l10n_it_chart_template_generic,Iva al 21% detraibile 15%,32,0.21,,True,percent,,,purchase,template_impcode_pagata_21det15,,template_impcode_pagata_21det15,,1,1,False,-1,-1
1599+2115b,2115b,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (D),200,0,2115,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det15,,template_ivacode_pagata_21det15,1,1,False,-1,-1
1600+2115a,2115a,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (I),100,0.85,2115,False,percent,,,purchase,,template_ivacode_pagata_21det15ind,,template_ivacode_pagata_21det15ind,1,1,False,-1,-1
1601+2140,2140,l10n_it_chart_template_generic,Iva al 21% detraibile 40%,33,0.21,,True,percent,,,purchase,template_impcode_pagata_21det40,,template_impcode_pagata_21det40,,1,1,False,-1,-1
1602+2140b,2140b,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (D),200,0,2140,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det40,,template_ivacode_pagata_21det40,1,1,False,-1,-1
1603+2140a,2140a,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (I),100,0.6,2140,False,percent,,,purchase,,template_ivacode_pagata_21det40ind,,template_ivacode_pagata_21det40ind,1,1,False,-1,-1
1604+21AO,21AO,l10n_it_chart_template_generic,Iva al 21% indetraibile,34,0.21,,True,percent,,,purchase,template_impcode_pagata_21ind,,template_impcode_pagata_21ind,,1,1,False,-1,-1
1605+21AOb,21AOb,l10n_it_chart_template_generic,Iva al 21% indetraibile (D),200,0,21AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_21ind,,template_ivacode_pagata_21ind,1,1,False,-1,-1
1606+21AOa,21AOa,l10n_it_chart_template_generic,Iva al 21% indetraibile (I),100,1,21AO,False,percent,,,purchase,,template_ivacode_pagata_21ind,,template_ivacode_pagata_21ind,1,1,False,-1,-1
1607+21I5,21I5,l10n_it_chart_template_generic,IVA al 21% detraibile al 50%,35,0.21,,True,percent,,,purchase,template_impcode_pagata_21det50,,template_impcode_pagata_21det50,,1,1,False,-1,-1
1608+21I5b,21I5b,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (D),200,0,21I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det50,,template_ivacode_pagata_21det50,1,1,False,-1,-1
1609+21I5a,21I5a,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (I),100,0.5,21I5,False,percent,,,purchase,,template_ivacode_pagata_21det50ind,,template_ivacode_pagata_21det50ind,1,1,False,-1,-1
1610
1611=== modified file 'l10n_lu/account_financial_report.xml'
1612--- l10n_lu/account_financial_report.xml 2012-12-03 15:19:34 +0000
1613+++ l10n_lu/account_financial_report.xml 2013-06-06 12:58:46 +0000
1614@@ -84,7 +84,7 @@
1615 </record>
1616
1617 <record model="account.financial.report" id="account_financial_report_23">
1618- <field name="name">2. Concessions, brevets, licences, marques, ainsi que droits et valeurs similaires s&#8217;ils ont &#233;t&#233;</field>
1619+ <field name="name">2. Concessions, brevets, licences, marques, ainsi que droits et valeurs similaires s&#8217;ils ont &#233;t&#233;</field>
1620 <field name="sequence">115</field>
1621 <field name="sign" eval="1"/>
1622 <field name="display_detail">detail_flat</field>
1623@@ -256,7 +256,7 @@
1624 </record>
1625
1626 <record model="account.financial.report" id="account_financial_report_42">
1627- <field name="name">I. Stocks </field>
1628+ <field name="name">I. Stocks</field>
1629 <field name="sequence">153</field>
1630 <field name="sign" eval="1"/>
1631 <field name="display_detail">detail_flat</field>
1632@@ -292,7 +292,7 @@
1633 </record>
1634
1635 <record model="account.financial.report" id="account_financial_report_46">
1636- <field name="name">4. Acomptes vers&#233;s </field>
1637+ <field name="name">4. Acomptes vers&#233;s</field>
1638 <field name="sequence">161</field>
1639 <field name="sign" eval="1"/>
1640 <field name="display_detail">no_detail</field>
1641@@ -301,7 +301,7 @@
1642 </record>
1643
1644 <record model="account.financial.report" id="account_financial_report_47">
1645- <field name="name">II. Cr&#233;ances </field>
1646+ <field name="name">II. Cr&#233;ances</field>
1647 <field name="sequence">163</field>
1648 <field name="sign" eval="1"/>
1649 <field name="display_detail">detail_flat</field>
1650@@ -364,7 +364,7 @@
1651 </record>
1652
1653 <record model="account.financial.report" id="account_financial_report_54">
1654- <field name="name">3. Cr&#233;ances sur des entreprises avec lesquelles la soci&#233;t&#233; a un</field>
1655+ <field name="name">3. Cr&#233;ances sur des entreprises avec lesquelles la soci&#233;t&#233; a un lien de participation</field>
1656 <field name="sequence">177</field>
1657 <field name="sign" eval="1"/>
1658 <field name="display_detail">detail_flat</field>
1659@@ -436,7 +436,7 @@
1660 </record>
1661
1662 <record model="account.financial.report" id="account_financial_report_62">
1663- <field name="name">2. Actions propres ou parts propres </field>
1664+ <field name="name">2. Actions propres ou parts propres</field>
1665 <field name="sequence">193</field>
1666 <field name="sign" eval="1"/>
1667 <field name="display_detail">no_detail</field>
1668@@ -445,7 +445,7 @@
1669 </record>
1670
1671 <record model="account.financial.report" id="account_financial_report_63">
1672- <field name="name">3. Autres valeurs mobili&#232;res </field>
1673+ <field name="name">3. Autres valeurs mobili&#232;res</field>
1674 <field name="sequence">195</field>
1675 <field name="sign" eval="1"/>
1676 <field name="display_detail">no_detail</field>
1677@@ -963,7 +963,7 @@
1678 </record>
1679
1680 <record model="account.financial.report" id="account_financial_report_119">
1681- <field name="name">CHARGES</field>
1682+ <field name="name">A. CHARGES</field>
1683 <field name="sequence">641</field>
1684 <field name="sign" eval="1"/>
1685 <field name="display_detail">detail_flat</field>
1686@@ -972,7 +972,7 @@
1687 </record>
1688
1689 <record model="account.financial.report" id="account_financial_report_120">
1690- <field name="name">1. Consommation de marchandises et de mati&#232;res premi&#232;res et consommables</field>
1691+ <field name="name">1. Consommation de marchandises et de mati&#232;res premi&#232;res et consommables</field>
1692 <field name="sequence">601</field>
1693 <field name="sign" eval="1"/>
1694 <field name="display_detail">no_detail</field>
1695@@ -1044,7 +1044,7 @@
1696 </record>
1697
1698 <record model="account.financial.report" id="account_financial_report_128">
1699- <field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles</field>
1700+ <field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles et incorporelles</field>
1701 <field name="sequence">617</field>
1702 <field name="sign" eval="1"/>
1703 <field name="display_detail">no_detail</field>
1704@@ -1071,7 +1071,7 @@
1705 </record>
1706
1707 <record model="account.financial.report" id="account_financial_report_131">
1708- <field name="name">6. Corrections de valeur sur immobilisations financi&#232;res et aj</field>
1709+ <field name="name">6. Corrections de valeur sur immobilisations financi&#232;res et ajustement de juste valeur sur immobilisations financières</field>
1710 <field name="sequence">623</field>
1711 <field name="sign" eval="1"/>
1712 <field name="display_detail">no_detail</field>
1713@@ -1080,7 +1080,7 @@
1714 </record>
1715
1716 <record model="account.financial.report" id="account_financial_report_132">
1717- <field name="name">7. Corrections de valeur et ajustement de juste valeur sur &#233;l&#233;m</field>
1718+ <field name="name">7. Corrections de valeur et ajustement de juste valeur sur &#233;l&#233;ments financiers de l'actif circulant. Moins-values de cessions des valeurs mobilières</field>
1719 <field name="sequence">625</field>
1720 <field name="sign" eval="1"/>
1721 <field name="display_detail">no_detail</field>
1722@@ -1143,7 +1143,7 @@
1723 </record>
1724
1725 <record model="account.financial.report" id="account_financial_report_140">
1726- <field name="name">PRODUITS</field>
1727+ <field name="name">B. PRODUITS</field>
1728 <field name="sequence">737</field>
1729 <field name="sign" eval="-1"/>
1730 <field name="display_detail">detail_flat</field>
1731@@ -1161,7 +1161,7 @@
1732 </record>
1733
1734 <record model="account.financial.report" id="account_financial_report_142">
1735- <field name="name">2. Variation des stocks de produits finis, et de produits et de commandes en cours</field>
1736+ <field name="name">2. Variation des stocks de produits finis, et de produits et de commandes en cours</field>
1737 <field name="sequence">703</field>
1738 <field name="sign" eval="-1"/>
1739 <field name="display_detail">no_detail</field>
1740@@ -1188,7 +1188,7 @@
1741 </record>
1742
1743 <record model="account.financial.report" id="account_financial_report_145">
1744- <field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles</field>
1745+ <field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles et incorporelles</field>
1746 <field name="sequence">709</field>
1747 <field name="sign" eval="-1"/>
1748 <field name="display_detail">no_detail</field>
1749
1750=== modified file 'mail/mail_mail.py'
1751--- mail/mail_mail.py 2013-06-04 15:15:08 +0000
1752+++ mail/mail_mail.py 2013-06-06 12:58:46 +0000
1753@@ -60,9 +60,6 @@
1754 'recipient_ids': fields.many2many('res.partner', string='To (Partners)'),
1755 'email_cc': fields.char('Cc', help='Carbon copy message recipients'),
1756 'body_html': fields.text('Rich-text Contents', help="Rich-text/HTML message"),
1757- # If not set in create values, auto-detected based on create values (res_id, model, email_from)
1758- 'reply_to': fields.char('Reply-To',
1759- help='Preferred response address for the message'),
1760 # Auto-detected based on create() - if 'mail_message_id' was passed then this mail is a notification
1761 # and during unlink() we will not cascade delete the parent and its attachments
1762 'notification': fields.boolean('Is Notification',
1763
1764=== modified file 'mail/mail_message.py'
1765--- mail/mail_message.py 2013-05-23 06:02:23 +0000
1766+++ mail/mail_message.py 2013-06-06 12:58:46 +0000
1767@@ -158,6 +158,7 @@
1768 'author_id': fields.many2one('res.partner', 'Author', select=1,
1769 ondelete='set null',
1770 help="Author of the message. If not set, email_from may hold an email address that did not match any partner."),
1771+ 'author_avatar': fields.related('author_id', 'image_small', type="binary", string="Author's Avatar"),
1772 'partner_ids': fields.many2many('res.partner', string='Recipients'),
1773 'notified_partner_ids': fields.many2many('res.partner', 'mail_notification',
1774 'message_id', 'partner_id', 'Notified partners',
1775@@ -291,7 +292,7 @@
1776 }
1777 if starred:
1778 values['read'] = False
1779-
1780+
1781 notif_ids = notification_obj.search(cr, uid, domain, context=context)
1782
1783 # all message have notifications: already set them as (un)starred
1784@@ -398,6 +399,7 @@
1785 'parent_id': parent_id,
1786 'is_private': is_private,
1787 'author_id': False,
1788+ 'author_avatar': message.author_avatar,
1789 'is_author': False,
1790 'partner_ids': [],
1791 'vote_nb': vote_nb,
1792@@ -528,7 +530,6 @@
1793 message_unload_ids = message_unload_ids if message_unload_ids is not None else []
1794 if message_unload_ids:
1795 domain += [('id', 'not in', message_unload_ids)]
1796- notification_obj = self.pool.get('mail.notification')
1797 limit = limit or self._message_read_limit
1798 message_tree = {}
1799 message_list = []
1800@@ -738,12 +739,10 @@
1801 for model, doc_dict in model_record_ids.items():
1802 model_obj = self.pool[model]
1803 mids = model_obj.exists(cr, uid, doc_dict.keys())
1804- if operation in ['create', 'write', 'unlink']:
1805- model_obj.check_access_rights(cr, uid, 'write')
1806- model_obj.check_access_rule(cr, uid, mids, 'write', context=context)
1807+ if hasattr(model_obj, 'check_mail_message_access'):
1808+ model_obj.check_mail_message_access(cr, uid, mids, operation, context=context)
1809 else:
1810- model_obj.check_access_rights(cr, uid, operation)
1811- model_obj.check_access_rule(cr, uid, mids, operation, context=context)
1812+ self.pool['mail.thread'].check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
1813 document_related_ids += [mid for mid, message in message_values.iteritems()
1814 if message.get('model') == model and message.get('res_id') in mids]
1815
1816
1817=== modified file 'mail/mail_thread.py'
1818--- mail/mail_thread.py 2013-05-23 06:02:23 +0000
1819+++ mail/mail_thread.py 2013-06-06 12:58:46 +0000
1820@@ -101,12 +101,16 @@
1821
1822 if catchall_domain and model and res_id: # specific res_id -> find its alias (i.e. section_id specified)
1823 object_id = self.pool.get(model).browse(cr, uid, res_id, context=context)
1824- alias = object_id.alias_id
1825+ # check that the alias effectively creates new records
1826+ if object_id.alias_id and object_id.alias_id.alias_model_id and \
1827+ object_id.alias_id.alias_model_id.model == self._name and \
1828+ object_id.alias_id.alias_force_thread_id == 0:
1829+ alias = object_id.alias_id
1830 elif catchall_domain and model: # no specific res_id given -> generic help message, take an example alias (i.e. alias of some section_id)
1831 model_id = self.pool.get('ir.model').search(cr, uid, [("model", "=", self._name)], context=context)[0]
1832 alias_obj = self.pool.get('mail.alias')
1833- alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id)], context=context, limit=1, order='id ASC')
1834- if alias_ids:
1835+ alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id), ('alias_force_thread_id', '=', 0)], context=context, order='id ASC')
1836+ if alias_ids and len(alias_ids) == 1: # if several aliases -> incoherent to propose one guessed from nowhere, therefore avoid if several aliases
1837 alias = alias_obj.browse(cr, uid, alias_ids[0], context=context)
1838
1839 if alias:
1840@@ -281,14 +285,21 @@
1841 context = {}
1842 thread_id = super(mail_thread, self).create(cr, uid, values, context=context)
1843
1844+ # automatic logging unless asked not to (mainly for various testing purpose)
1845+ if not context.get('mail_create_nolog'):
1846+ self.message_post(cr, uid, thread_id, body=_('%s created') % (self._description), context=context)
1847+
1848 # subscribe uid unless asked not to
1849 if not context.get('mail_create_nosubscribe'):
1850 self.message_subscribe_users(cr, uid, [thread_id], [uid], context=context)
1851 self.message_auto_subscribe(cr, uid, [thread_id], values.keys(), context=context)
1852
1853- # automatic logging unless asked not to (mainly for various testing purpose)
1854- if not context.get('mail_create_nolog'):
1855- self.message_post(cr, uid, thread_id, body=_('%s created') % (self._description), context=context)
1856+ # track values
1857+ tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=context)
1858+ if tracked_fields:
1859+ initial_values = {thread_id: dict((item, False) for item in tracked_fields)}
1860+ self.message_track(cr, uid, [thread_id], tracked_fields, initial_values, context=context)
1861+
1862 return thread_id
1863
1864 def write(self, cr, uid, ids, values, context=None):
1865@@ -449,6 +460,20 @@
1866 ir_attachment_obj.unlink(cr, uid, attach_ids, context=context)
1867 return True
1868
1869+ def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
1870+ """ mail.message check permission rules for related document. This method is
1871+ meant to be inherited in order to implement addons-specific behavior.
1872+ A common behavior would be to allow creating messages when having read
1873+ access rule on the document, for portal document such as issues. """
1874+ if not model_obj:
1875+ model_obj = self
1876+ if operation in ['create', 'write', 'unlink']:
1877+ model_obj.check_access_rights(cr, uid, 'write')
1878+ model_obj.check_access_rule(cr, uid, mids, 'write', context=context)
1879+ else:
1880+ model_obj.check_access_rights(cr, uid, operation)
1881+ model_obj.check_access_rule(cr, uid, mids, operation, context=context)
1882+
1883 def _get_formview_action(self, cr, uid, id, model=None, context=None):
1884 """ Return an action to open the document. This method is meant to be
1885 overridden in addons that want to give specific view ids for example.
1886
1887=== modified file 'mail/static/src/js/mail.js'
1888--- mail/static/src/js/mail.js 2013-05-22 10:33:05 +0000
1889+++ mail/static/src/js/mail.js 2013-06-06 12:58:46 +0000
1890@@ -219,6 +219,7 @@
1891 this.type = datasets.type || false,
1892 this.subtype = datasets.subtype || false,
1893 this.is_author = datasets.is_author || false,
1894+ this.author_avatar = datasets.author_avatar || false,
1895 this.is_private = datasets.is_private || false,
1896 this.subject = datasets.subject || false,
1897 this.name = datasets.name || false,
1898@@ -260,8 +261,10 @@
1899 this.date = this.date ? session.web.str_to_datetime(this.date) : false;
1900 if (this.date && new Date().getTime()-this.date.getTime() < 7*24*60*60*1000) {
1901 this.timerelative = $.timeago(this.date);
1902- }
1903- if (this.type == 'email' && (!this.author_id || !this.author_id[0])) {
1904+ }
1905+ if (this.author_avatar) {
1906+ this.avatar = "data:image/png;base64," + this.author_avatar;
1907+ } else if (this.type == 'email' && (!this.author_id || !this.author_id[0])) {
1908 this.avatar = ('/mail/static/src/img/email_icon.png');
1909 } else if (this.author_id && this.template != 'mail.compose_message') {
1910 this.avatar = mail.ChatterUtils.get_image(this.session, 'res.partner', 'image_small', this.author_id[0]);
1911@@ -850,9 +853,9 @@
1912
1913 on_checked_recipient: function (event) {
1914 var $input = $(event.target);
1915- var email = $input.attr("data");
1916+ var full_name = $input.attr("data");
1917 _.each(this.recipients, function (recipient) {
1918- if (recipient.email_address == email) {
1919+ if (recipient.full_name == full_name) {
1920 recipient.checked = $input.is(":checked");
1921 }
1922 });
1923
1924=== modified file 'mail/static/src/xml/mail.xml'
1925--- mail/static/src/xml/mail.xml 2013-04-24 13:12:41 +0000
1926+++ mail/static/src/xml/mail.xml 2013-06-06 12:58:46 +0000
1927@@ -143,7 +143,7 @@
1928 <div class="oe_recipients" t-if="!widget.is_log">
1929 <t t-foreach='widget.recipients' t-as='recipient'>
1930 <label t-attf-title="Add as recipient and follower (reason: #{recipient.reason})">
1931- <input type="checkbox" t-att-checked="recipient.checked ? 'checked' : undefined" t-att-data="recipient.email_address"/>
1932+ <input type="checkbox" t-att-checked="recipient.checked ? 'checked' : undefined" t-att-data="recipient.full_name"/>
1933 <t t-raw="recipient.name"/>
1934 <t t-if="recipient.email_address">(<t t-raw="recipient.email_address"/>)</t>
1935 <t t-if="!recipient.email_address">(no email address)</t>
1936
1937=== modified file 'mail/tests/test_mail_gateway.py'
1938--- mail/tests/test_mail_gateway.py 2013-05-22 11:42:36 +0000
1939+++ mail/tests/test_mail_gateway.py 2013-06-06 12:58:46 +0000
1940@@ -147,6 +147,8 @@
1941 self.assertEqual(mail.reply_to, 'other@example.com',
1942 'mail_mail: reply_to should be equal to the one coming from creation values')
1943 # Do: create a mail_mail with the previous mail_message
1944+ self.mail_message.write(cr, uid, [msg_id], {'reply_to': 'custom@example.com'})
1945+ msg.refresh()
1946 mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'})
1947 mail = self.mail_mail.browse(cr, uid, mail_id)
1948 # Test: mail_mail content
1949@@ -177,12 +179,15 @@
1950 mail = self.mail_mail.browse(cr, uid, mail_id)
1951 # Test: mail_mail content
1952 self.assertEqual(mail.reply_to, msg.email_from,
1953- 'mail_mail: reply_to should equal to mail_message.email_from when having no document or default alias')
1954+ 'mail_mail: reply_to should be equal to mail_message.email_from when having no document or default alias')
1955
1956 # Data: set catchall domain
1957 self.registry('ir.config_parameter').set_param(cr, uid, 'mail.catchall.domain', 'schlouby.fr')
1958 self.registry('ir.config_parameter').unlink(cr, uid, self.registry('ir.config_parameter').search(cr, uid, [('key', '=', 'mail.catchall.alias')]))
1959
1960+ # Update message
1961+ self.mail_message.write(cr, uid, [msg_id], {'email_from': False, 'reply_to': False})
1962+ msg.refresh()
1963 # Do: create a mail_mail based on the previous mail_message
1964 mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'})
1965 mail = self.mail_mail.browse(cr, uid, mail_id)
1966@@ -191,7 +196,7 @@
1967 'mail_mail: reply_to should equal the mail.group alias')
1968
1969 # Update message
1970- self.mail_message.write(cr, uid, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr'})
1971+ self.mail_message.write(cr, uid, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr', 'reply_to': False})
1972 msg.refresh()
1973 # Do: create a mail_mail based on the previous mail_message
1974 mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'})
1975@@ -203,6 +208,9 @@
1976 # Data: set catchall alias
1977 self.registry('ir.config_parameter').set_param(self.cr, self.uid, 'mail.catchall.alias', 'gateway')
1978
1979+ # Update message
1980+ self.mail_message.write(cr, uid, [msg_id], {'email_from': False, 'reply_to': False})
1981+ msg.refresh()
1982 # Do: create a mail_mail based on the previous mail_message
1983 mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'})
1984 mail = self.mail_mail.browse(cr, uid, mail_id)
1985
1986=== modified file 'mail/wizard/mail_compose_message.py'
1987--- mail/wizard/mail_compose_message.py 2013-04-18 09:41:47 +0000
1988+++ mail/wizard/mail_compose_message.py 2013-06-06 12:58:46 +0000
1989@@ -270,6 +270,7 @@
1990 context.pop('default_partner_ids', None)
1991 # post the message
1992 if mass_mail_mode and not wizard.post:
1993+ post_values['body_html'] = post_values.get('body', '')
1994 post_values['recipient_ids'] = [(4, id) for id in post_values.pop('partner_ids', [])]
1995 self.pool.get('mail.mail').create(cr, uid, post_values, context=context)
1996 else:
1997
1998=== modified file 'mrp/procurement.py'
1999--- mrp/procurement.py 2013-04-15 10:23:49 +0000
2000+++ mrp/procurement.py 2013-06-06 12:58:46 +0000
2001@@ -33,6 +33,11 @@
2002 'production_id': fields.many2one('mrp.production', 'Manufacturing Order'),
2003 }
2004
2005+ def _prepare_order_line_procurement(self, cr, uid, order, line, move_id, date_planned, context=None):
2006+ result = super(procurement_order, self)._prepare_order_line_procurement(cr, uid, order, line, move_id, date_planned, context)
2007+ result['property_ids'] = [(6, 0, [x.id for x in line.property_ids])]
2008+ return result
2009+
2010 def check_produce_product(self, cr, uid, procurement, context=None):
2011 ''' Depict the capacity of the procurement workflow to produce products (not services)'''
2012 return True
2013
2014=== modified file 'mrp/report/order.rml'
2015--- mrp/report/order.rml 2011-12-21 09:08:11 +0000
2016+++ mrp/report/order.rml 2013-06-06 12:58:46 +0000
2017@@ -139,37 +139,18 @@
2018 <initialize>
2019 <paraStyle name="all" alignment="justify"/>
2020 </initialize>
2021- <paraStyle name="Standard" fontName="Helvetica"/>
2022- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
2023- <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
2024- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
2025- <paraStyle name="Table Contents" fontName="Helvetica"/>
2026- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
2027- <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
2028- <paraStyle name="Index" fontName="Helvetica"/>
2029- <paraStyle name="Footer" fontName="Helvetica"/>
2030- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
2031- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2032- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
2033- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2034- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2035- <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2036- <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2037- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2038- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
2039- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2040- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
2041- <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2042- <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2043- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2044- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
2045- <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2046- <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2047- <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2048- <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2049- <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2050- <paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2051- <paraStyle name="terp_default_space" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="0.0"/>
2052+ <paraStyle name="terp_header" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2053+ <paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2054+ <paraStyle name="terp_default_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2055+ <paraStyle name="terp_default_Bold_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2056+ <paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2057+ <paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2058+ <paraStyle name="terp_default_Centre_8" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2059+ <paraStyle name="terp_default_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2060+ <paraStyle name="terp_default_Bold_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2061+ <paraStyle name="terp_default_Centre_9" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2062+ <paraStyle name="terp_default_Right_9" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2063+ <paraStyle name="terp_default_2" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2064 <images/>
2065 </stylesheet>
2066 <story>
2067@@ -178,16 +159,16 @@
2068 <blockTable colWidths="256.0,61.0,107.0,104.0" style="Table8">
2069 <tr>
2070 <td>
2071- <para style="terp_tblheader_Details">Product </para>
2072- </td>
2073- <td>
2074- <para style="terp_tblheader_Details_Centre">Quantity</para>
2075- </td>
2076- <td>
2077- <para style="terp_tblheader_Details_Centre">Source Location</para>
2078- </td>
2079- <td>
2080- <para style="terp_tblheader_Details_Centre">Destination Location</para>
2081+ <para style="terp_tblheader_Details"><b>Product </b></para>
2082+ </td>
2083+ <td>
2084+ <para style="terp_tblheader_Details_Centre"><b>Quantity</b></para>
2085+ </td>
2086+ <td>
2087+ <para style="terp_tblheader_Details_Centre"><b>Source Location</b></para>
2088+ </td>
2089+ <td>
2090+ <para style="terp_tblheader_Details_Centre"><b>Destination Location</b></para>
2091 </td>
2092 </tr>
2093 </blockTable>
2094@@ -196,20 +177,20 @@
2095 <para style="terp_default_8">
2096 <font color="white"> </font>
2097 </para>
2098- <para style="terp_header">Production Order N° : [[ o.name ]]</para>
2099+ <para style="terp_header"><b>Production Order N° : [[ o.name ]]</b></para>
2100 <para style="terp_default_8">
2101 <font color="white"> </font>
2102 </para>
2103 <blockTable colWidths="193.0,206.0,129.0" style="Table3">
2104 <tr>
2105 <td>
2106- <para style="terp_tblheader_General_Centre">Source Document</para>
2107- </td>
2108- <td>
2109- <para style="terp_tblheader_General_Centre">Product </para>
2110- </td>
2111- <td>
2112- <para style="terp_tblheader_General_Centre">Quantity</para>
2113+ <para style="terp_tblheader_General_Centre"><b>Source Document</b></para>
2114+ </td>
2115+ <td>
2116+ <para style="terp_tblheader_General_Centre"><b>Product </b></para>
2117+ </td>
2118+ <td>
2119+ <para style="terp_tblheader_General_Centre"><b>Quantity</b></para>
2120 </td>
2121 </tr>
2122 </blockTable>
2123@@ -232,16 +213,16 @@
2124 <blockTable colWidths="193.0,92.0,114.0,129.0" repeatRows="1" style="Table1">
2125 <tr>
2126 <td>
2127- <para style="terp_tblheader_General_Centre">Scheduled Date</para>
2128- </td>
2129- <td>
2130- <para style="terp_tblheader_General_Centre">Printing date</para>
2131- </td>
2132- <td>
2133- <para style="terp_tblheader_General_Centre">Partner Ref</para>
2134- </td>
2135- <td>
2136- <para style="terp_tblheader_General_Centre">SO Number</para>
2137+ <para style="terp_tblheader_General_Centre"><b>Scheduled Date</b></para>
2138+ </td>
2139+ <td>
2140+ <para style="terp_tblheader_General_Centre"><b>Printing date</b></para>
2141+ </td>
2142+ <td>
2143+ <para style="terp_tblheader_General_Centre"><b>Partner Ref</b></para>
2144+ </td>
2145+ <td>
2146+ <para style="terp_tblheader_General_Centre"><b>SO Number</b></para>
2147 </td>
2148 </tr>
2149 </blockTable>
2150@@ -266,26 +247,26 @@
2151 <para style="terp_default_8">
2152 <font color="white"> </font>
2153 </para>
2154- <para style="terp_default_Bold_8">Work Orders [[ o.workcenter_lines ==[] and removeParentNode('para')]]</para>
2155+ <para style="terp_default_Bold_8"><b>Work Orders [[ o.workcenter_lines ==[] and removeParentNode('para')]]</b></para>
2156 <para style="terp_default_8">
2157 <font color="white"> </font>
2158 </para>
2159 <blockTable colWidths="74.0,212.0,112.0,66.0,64.0" style="Table6">
2160 <tr>
2161 <td>
2162- <para style="terp_tblheader_General_Centre">Sequence</para>
2163- </td>
2164- <td>
2165- <para style="terp_tblheader_Details_Centre">Name [[ o.workcenter_lines ==[] and removeParentNode('blockTable')]]</para>
2166- </td>
2167- <td>
2168- <para style="terp_tblheader_General_Centre">WorkCenter</para>
2169- </td>
2170- <td>
2171- <para style="terp_tblheader_General_Centre">No. Of Cycles</para>
2172- </td>
2173- <td>
2174- <para style="terp_tblheader_General_Centre">No. Of Hours</para>
2175+ <para style="terp_tblheader_General_Centre"><b>Sequence</b></para>
2176+ </td>
2177+ <td>
2178+ <para style="terp_tblheader_Details_Centre"><b>Name [[ o.workcenter_lines ==[] and removeParentNode('blockTable')]]</b></para>
2179+ </td>
2180+ <td>
2181+ <para style="terp_tblheader_General_Centre"><b>WorkCenter</b></para>
2182+ </td>
2183+ <td>
2184+ <para style="terp_tblheader_General_Centre"><b>No. Of Cycles</b></para>
2185+ </td>
2186+ <td>
2187+ <para style="terp_tblheader_General_Centre"><b>No. Of Hours</b></para>
2188 </td>
2189 </tr>
2190 </blockTable>
2191@@ -317,28 +298,28 @@
2192 <para style="terp_default_8">
2193 <font color="white"> </font>
2194 </para>
2195- <para style="terp_default_Bold_9">Bill Of Material </para>
2196+ <para style="terp_default_Bold_9"><b>Bill Of Material </b></para>
2197 <para style="terp_default_8">
2198 <font color="white"> </font>
2199 </para>
2200 <blockTable colWidths="256.0,61.0,107.0,104.0" style="Table8">
2201 <tr>
2202 <td>
2203- <para style="terp_tblheader_Details">Product </para>
2204- </td>
2205- <td>
2206- <para style="terp_tblheader_Details_Centre">Quantity</para>
2207- </td>
2208- <td>
2209- <para style="terp_tblheader_Details_Centre">Source Location</para>
2210- </td>
2211- <td>
2212- <para style="terp_tblheader_Details_Centre">Destination Location</para>
2213+ <para style="terp_tblheader_Details"><b>Product </b></para>
2214+ </td>
2215+ <td>
2216+ <para style="terp_tblheader_Details_Centre"><b>Quantity</b></para>
2217+ </td>
2218+ <td>
2219+ <para style="terp_tblheader_Details_Centre"><b>Source Location</b></para>
2220+ </td>
2221+ <td>
2222+ <para style="terp_tblheader_Details_Centre"><b>Destination Location</b></para>
2223 </td>
2224 </tr>
2225 </blockTable>
2226 <section>
2227- <para style="terp_default_Bold_9">Products to Consume [[ o.move_lines ==[] and removeParentNode('section')]]</para>
2228+ <para style="terp_default_Bold_9"><b>Products to Consume [[ o.move_lines ==[] and removeParentNode('section')]]</b></para>
2229 <section>
2230 <para style="terp_default_2">[[ repeatIn(o.move_lines,'line') ]]</para>
2231 <blockTable colWidths="250.0,65.0,108.0,104.0" style="Table9">
2232@@ -363,7 +344,7 @@
2233 <para style="terp_default_Bold_9">
2234 <font color="white"> </font>
2235 </para>
2236- <para style="terp_default_Bold_9">Consumed Products [[ o.move_lines2 ==[] and removeParentNode('section')]]</para>
2237+ <para style="terp_default_Bold_9"><b>Consumed Products [[ o.move_lines2 ==[] and removeParentNode('section')]]</b></para>
2238 <section>
2239 <para style="terp_default_2">[[ repeatIn(o.move_lines2,'line2') ]]</para>
2240 <blockTable colWidths="251.0,66.0,106.0,104.0" style="Table10">
2241
2242=== modified file 'portal/security/portal_security.xml'
2243--- portal/security/portal_security.xml 2012-12-17 15:04:58 +0000
2244+++ portal/security/portal_security.xml 2013-06-06 12:58:46 +0000
2245@@ -5,7 +5,7 @@
2246 <record id="portal_read_own_res_partner" model="ir.rule">
2247 <field name="name">res_partner: read access on my partner</field>
2248 <field name="model_id" ref="base.model_res_partner"/>
2249- <field name="domain_force">[('user_ids', 'in', user.id)]</field>
2250+ <field name="domain_force">[('id', 'child_of', user.commercial_partner_id.id)]</field>
2251 <field name="groups" eval="[(4, ref('group_portal')), (4, ref('group_anonymous'))]"/>
2252 <field name="perm_create" eval="False"/>
2253 <field name="perm_unlink" eval="False"/>
2254
2255=== modified file 'portal/wizard/portal_wizard.py'
2256--- portal/wizard/portal_wizard.py 2013-04-10 13:02:44 +0000
2257+++ portal/wizard/portal_wizard.py 2013-06-06 12:58:46 +0000
2258@@ -20,7 +20,6 @@
2259 ##############################################################################
2260
2261 import logging
2262-import random
2263
2264 from openerp.osv import fields, osv
2265 from openerp.tools.translate import _
2266@@ -34,14 +33,15 @@
2267 WELCOME_EMAIL_SUBJECT = _("Your OpenERP account at %(company)s")
2268 WELCOME_EMAIL_BODY = _("""Dear %(name)s,
2269
2270-You have been given access to %(portal)s.
2271+You have been given access to %(company)s's %(portal)s.
2272
2273 Your login account data is:
2274-Database: %(db)s
2275-Username: %(login)s
2276+ Username: %(login)s
2277+ Portal: %(portal_url)s
2278+ Database: %(db)s
2279
2280-In order to complete the signin process, click on the following url:
2281-%(url)s
2282+You can set or change your password via the following url:
2283+ %(signup_url)s
2284
2285 %(welcome_message)s
2286
2287@@ -116,24 +116,57 @@
2288 _description = 'Portal User Config'
2289
2290 _columns = {
2291- 'wizard_id': fields.many2one('portal.wizard', string='Wizard', required=True),
2292+ 'wizard_id': fields.many2one('portal.wizard', string='Wizard', required=True, ondelete='cascade'),
2293 'partner_id': fields.many2one('res.partner', string='Contact', required=True, readonly=True),
2294 'email': fields.char(size=240, string='Email'),
2295 'in_portal': fields.boolean('In Portal'),
2296 }
2297
2298- def create(self, cr, uid, values, context=None):
2299- """ overridden to update the partner's email (if necessary) """
2300- id = super(wizard_user, self).create(cr, uid, values, context)
2301- wuser = self.browse(cr, uid, id, context)
2302- if wuser.partner_id.email != wuser.email:
2303- wuser.partner_id.write({'email': wuser.email})
2304- return id
2305+ def get_error_messages(self, cr, uid, ids, context=None):
2306+ res_users = self.pool.get('res.users')
2307+ emails = []
2308+ error_empty = []
2309+ error_emails = []
2310+ error_user = []
2311+ ctx = dict(context or {}, active_test=False)
2312+ for wizard_user in self.browse(cr, SUPERUSER_ID, ids, context):
2313+ if wizard_user.in_portal and not self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context):
2314+ email = extract_email(wizard_user.email)
2315+ if not email:
2316+ error_empty.append(wizard_user.partner_id)
2317+ elif email in emails and email not in error_emails:
2318+ error_emails.append(wizard_user.partner_id)
2319+ user = res_users.search(cr, SUPERUSER_ID, [('login', '=', email)], context=ctx)
2320+ if user:
2321+ error_user.append(wizard_user.partner_id)
2322+ emails.append(email)
2323+
2324+ error_msg = []
2325+ if error_empty:
2326+ error_msg.append("%s\n- %s" % (_("Some contacts don't have a valid email: "),
2327+ '\n- '.join(['%s' % (p.display_name,) for p in error_empty])))
2328+ if error_emails:
2329+ error_msg.append("%s\n- %s" % (_("Several contacts have the same email: "),
2330+ '\n- '.join([p.email for p in error_emails])))
2331+ if error_user:
2332+ error_msg.append("%s\n- %s" % (_("Some contacts have the same email as an existing portal user:"),
2333+ '\n- '.join(['%s <%s>' % (p.display_name, p.email) for p in error_user])))
2334+ if error_msg:
2335+ error_msg.append(_("To resolve this error, you can: \n"
2336+ "- Correct the emails of the relevant contacts\n"
2337+ "- Grant access only to contacts with unique emails"))
2338+ return error_msg
2339
2340 def action_apply(self, cr, uid, ids, context=None):
2341+ error_msg = self.get_error_messages(cr, uid, ids, context=context)
2342+ if error_msg:
2343+ raise osv.except_osv(_('Contacts Error'), "\n\n".join(error_msg))
2344+
2345 for wizard_user in self.browse(cr, SUPERUSER_ID, ids, context):
2346 portal = wizard_user.wizard_id.portal_id
2347 user = self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context)
2348+ if wizard_user.partner_id.email != wizard_user.email:
2349+ wizard_user.partner_id.write({'email': wizard_user.email})
2350 if wizard_user.in_portal:
2351 # create a user if necessary, and make sure it is in the portal group
2352 if not user:
2353@@ -142,8 +175,8 @@
2354 user.write({'active': True, 'groups_id': [(4, portal.id)]})
2355 # prepare for the signup process
2356 user.partner_id.signup_prepare()
2357- wizard_user = self.browse(cr, SUPERUSER_ID, wizard_user.id, context)
2358- self._send_email(cr, uid, wizard_user, context)
2359+ wizard_user.refresh()
2360+ self._send_email(cr, uid, wizard_user, context)
2361 else:
2362 # remove the user (if it exists) from the portal group
2363 if user and (portal in user.groups_id):
2364@@ -158,13 +191,11 @@
2365 @param wizard_user: browse record of model portal.wizard.user
2366 @return: browse record of model res.users
2367 """
2368- if wizard_user.partner_id.user_ids:
2369- return wizard_user.partner_id.user_ids[0]
2370- # the user may be inactive, search for it
2371+ context = dict(context or {}, active_test=False)
2372 res_users = self.pool.get('res.users')
2373- domain = [('partner_id', '=', wizard_user.partner_id.id), ('active', '=', False)]
2374- user_ids = res_users.search(cr, uid, domain)
2375- return user_ids and res_users.browse(cr, uid, user_ids[0], context) or False
2376+ domain = [('partner_id', '=', wizard_user.partner_id.id)]
2377+ user_ids = res_users.search(cr, uid, domain, context=context)
2378+ return user_ids and res_users.browse(cr, uid, user_ids[0], context=context) or False
2379
2380 def _create_user(self, cr, uid, wizard_user, context=None):
2381 """ create a new user for wizard_user.partner_id
2382@@ -174,6 +205,7 @@
2383 res_users = self.pool.get('res.users')
2384 create_context = dict(context or {}, noshortcut=True, no_reset_password=True) # to prevent shortcut creation
2385 values = {
2386+ 'email': extract_email(wizard_user.email),
2387 'login': extract_email(wizard_user.email),
2388 'partner_id': wizard_user.partner_id.id,
2389 'groups_id': [(6, 0, [])],
2390@@ -187,6 +219,7 @@
2391 @param wizard_user: browse record of model portal.wizard.user
2392 @return: the id of the created mail.mail record
2393 """
2394+ res_partner = self.pool['res.partner']
2395 this_context = context
2396 this_user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context)
2397 if not this_user.email:
2398@@ -196,6 +229,12 @@
2399 # determine subject and body in the portal user's language
2400 user = self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context)
2401 context = dict(this_context or {}, lang=user.lang)
2402+ ctx_portal_url = dict(context, signup_force_type_in_url='')
2403+ portal_url = res_partner._get_signup_url_for_action(cr, uid,
2404+ [user.partner_id.id],
2405+ context=ctx_portal_url)[user.partner_id.id]
2406+ res_partner.signup_prepare(cr, uid, [user.partner_id.id], context=context)
2407+
2408 data = {
2409 'company': this_user.company_id.name,
2410 'portal': wizard_user.wizard_id.portal_id.name,
2411@@ -203,7 +242,8 @@
2412 'db': cr.dbname,
2413 'name': user.name,
2414 'login': user.login,
2415- 'url': user.signup_url,
2416+ 'signup_url': user.signup_url,
2417+ 'portal_url': portal_url,
2418 }
2419 mail_mail = self.pool.get('mail.mail')
2420 mail_values = {
2421
2422=== modified file 'portal_hr_employees/hr_employee_view.xml'
2423--- portal_hr_employees/hr_employee_view.xml 2013-05-16 16:19:49 +0000
2424+++ portal_hr_employees/hr_employee_view.xml 2013-06-06 12:58:46 +0000
2425@@ -33,8 +33,9 @@
2426 </record>
2427
2428 <record model="ir.ui.view" id="portal_hr_kanban_view_employees">
2429- <field name="name">HR - Employess Kanban</field>
2430+ <field name="name">HR - Employees Kanban</field>
2431 <field name="model">hr.employee</field>
2432+ <field name="inherit_id" eval="False"/>
2433 <field name="arch" type="xml">
2434 <kanban>
2435 <field name="last_login"/>
2436
2437=== modified file 'procurement/procurement_view.xml'
2438--- procurement/procurement_view.xml 2013-03-14 11:27:40 +0000
2439+++ procurement/procurement_view.xml 2013-06-06 12:58:46 +0000
2440@@ -18,6 +18,7 @@
2441 <field name="product_uom" string="Unit of Measure"/>
2442 <field name="procure_method"/>
2443 <field name="state"/>
2444+ <field name="name" invisible="1"/>
2445 <field name="message"/>
2446 </tree>
2447 </field>
2448
2449=== modified file 'project/project.py'
2450--- project/project.py 2013-05-21 13:38:07 +0000
2451+++ project/project.py 2013-06-06 12:58:46 +0000
2452@@ -85,7 +85,7 @@
2453 if context and context.get('user_preference'):
2454 cr.execute("""SELECT project.id FROM project_project project
2455 LEFT JOIN account_analytic_account account ON account.id = project.analytic_account_id
2456- LEFT JOIN project_user_rel rel ON rel.project_id = project.analytic_account_id
2457+ LEFT JOIN project_user_rel rel ON rel.project_id = project.id
2458 WHERE (account.user_id = %s or rel.uid = %s)"""%(user, user))
2459 return [(r[0]) for r in cr.fetchall()]
2460 return super(project, self).search(cr, user, args, offset=offset, limit=limit, order=order,
2461@@ -581,12 +581,12 @@
2462
2463 _track = {
2464 'state': {
2465- 'project.mt_task_new': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'new',
2466+ 'project.mt_task_new': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['new', 'draft'],
2467 'project.mt_task_started': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'open',
2468 'project.mt_task_closed': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done',
2469 },
2470 'stage_id': {
2471- 'project.mt_task_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'done', 'open'],
2472+ 'project.mt_task_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'draft', 'done', 'open'],
2473 },
2474 'kanban_state': { # kanban state: tracked, but only block subtype
2475 'project.mt_task_blocked': lambda self, cr, uid, obj, ctx=None: obj['kanban_state'] == 'blocked',
2476@@ -1120,10 +1120,12 @@
2477 context = {}
2478 if not vals.get('stage_id'):
2479 ctx = context.copy()
2480- if vals.get('project_id'):
2481+ if vals.get('project_id'):
2482 ctx['default_project_id'] = vals['project_id']
2483 vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx)
2484- task_id = super(task, self).create(cr, uid, vals, context=context)
2485+ # context: no_log, because subtype already handle this
2486+ create_context = dict(context, mail_create_nolog=True)
2487+ task_id = super(task, self).create(cr, uid, vals, context=create_context)
2488 self._store_history(cr, uid, [task_id], context=context)
2489 return task_id
2490
2491@@ -1197,6 +1199,17 @@
2492 return [task.project_id.message_get_reply_to()[0] if task.project_id else False
2493 for task in self.browse(cr, uid, ids, context=context)]
2494
2495+ def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
2496+ """ mail.message document permission rule: can post a new message if can read
2497+ because of portal document. """
2498+ if not model_obj:
2499+ model_obj = self
2500+ if operation == 'create':
2501+ model_obj.check_access_rights(cr, uid, 'read')
2502+ model_obj.check_access_rule(cr, uid, mids, 'read', context=context)
2503+ else:
2504+ return super(task, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
2505+
2506 def message_new(self, cr, uid, msg, custom_values=None, context=None):
2507 """ Override to updates the document according to the email. """
2508 if custom_values is None: custom_values = {}
2509@@ -1205,7 +1218,7 @@
2510 'planned_hours': 0.0,
2511 }
2512 defaults.update(custom_values)
2513- return super(task,self).message_new(cr, uid, msg, custom_values=defaults, context=context)
2514+ return super(task, self).message_new(cr, uid, msg, custom_values=defaults, context=context)
2515
2516 def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
2517 """ Override to update the task according to the email. """
2518
2519=== modified file 'project/report/project_cumulative.xml'
2520--- project/report/project_cumulative.xml 2012-11-29 22:26:45 +0000
2521+++ project/report/project_cumulative.xml 2013-06-06 12:58:46 +0000
2522@@ -6,7 +6,7 @@
2523 <field name="name">project.task.history.cumulative.tree</field>
2524 <field name="model">project.task.history.cumulative</field>
2525 <field name="arch" type="xml">
2526- <tree string="Tasks's Cumulative Flow">
2527+ <tree string="Tasks's Cumulative Flow" create="false">
2528 <field name="date"/>
2529 <field name="project_id"/>
2530 <field name="task_id"/>
2531
2532=== modified file 'project_issue/project_issue.py'
2533--- project_issue/project_issue.py 2013-05-21 13:38:07 +0000
2534+++ project_issue/project_issue.py 2013-06-06 12:58:46 +0000
2535@@ -19,11 +19,12 @@
2536 #
2537 ##############################################################################
2538
2539+from openerp import SUPERUSER_ID
2540 from openerp.addons.base_status.base_stage import base_stage
2541 from openerp.addons.project.project import _TASK_STATE
2542 from openerp.addons.crm import crm
2543 from datetime import datetime
2544-from openerp.osv import fields,osv
2545+from openerp.osv import fields, osv, orm
2546 from openerp.tools.translate import _
2547 import binascii
2548 import time
2549@@ -49,12 +50,12 @@
2550
2551 _track = {
2552 'state': {
2553- 'project_issue.mt_issue_new': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'new',
2554+ 'project_issue.mt_issue_new': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['new', 'draft'],
2555 'project_issue.mt_issue_closed': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done',
2556 'project_issue.mt_issue_started': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'open',
2557 },
2558 'stage_id': {
2559- 'project_issue.mt_issue_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'done', 'open'],
2560+ 'project_issue.mt_issue_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'draft', 'done', 'open'],
2561 },
2562 'kanban_state': {
2563 'project_issue.mt_issue_blocked': lambda self, cr, uid, obj, ctx=None: obj['kanban_state'] == 'blocked',
2564@@ -69,7 +70,9 @@
2565 if vals.get('project_id'):
2566 ctx['default_project_id'] = vals['project_id']
2567 vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx)
2568- return super(project_issue, self).create(cr, uid, vals, context=context)
2569+ # context: no_log, because subtype already handle this
2570+ create_context = dict(context, mail_create_nolog=True)
2571+ return super(project_issue, self).create(cr, uid, vals, context=create_context)
2572
2573 def _get_default_project_id(self, cr, uid, context=None):
2574 """ Gives default project by checking if present in the context """
2575@@ -492,13 +495,27 @@
2576 return [issue.project_id.message_get_reply_to()[0] if issue.project_id else False
2577 for issue in self.browse(cr, uid, ids, context=context)]
2578
2579+ def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
2580+ """ mail.message document permission rule: can post a new message if can read
2581+ because of portal document. """
2582+ if not model_obj:
2583+ model_obj = self
2584+ if operation == 'create':
2585+ model_obj.check_access_rights(cr, uid, 'read')
2586+ model_obj.check_access_rule(cr, uid, mids, 'read', context=context)
2587+ else:
2588+ return super(project_issue, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
2589+
2590 def message_get_suggested_recipients(self, cr, uid, ids, context=None):
2591 recipients = super(project_issue, self).message_get_suggested_recipients(cr, uid, ids, context=context)
2592- for issue in self.browse(cr, uid, ids, context=context):
2593- if issue.email_from:
2594- self._message_add_suggested_recipient(cr, uid, recipients, issue, email=issue.email_from, reason=_('Customer Email'))
2595- elif issue.partner_id:
2596- self._message_add_suggested_recipient(cr, uid, recipients, issue, partner=issue.partner_id, reason=_('Customer'))
2597+ try:
2598+ for issue in self.browse(cr, uid, ids, context=context):
2599+ if issue.partner_id:
2600+ self._message_add_suggested_recipient(cr, uid, recipients, issue, partner=issue.partner_id, reason=_('Customer'))
2601+ elif issue.email_from:
2602+ self._message_add_suggested_recipient(cr, uid, recipients, issue, email=issue.email_from, reason=_('Customer Email'))
2603+ except (osv.except_osv, orm.except_orm): # no read access rights -> just ignore suggested recipients because this imply modifying followers
2604+ pass
2605 return recipients
2606
2607 def message_new(self, cr, uid, msg, custom_values=None, context=None):
2608@@ -560,13 +577,10 @@
2609 """
2610 if context is None:
2611 context = {}
2612-
2613 res = super(project_issue, self).message_post(cr, uid, thread_id, body=body, subject=subject, type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, content_subtype=content_subtype, **kwargs)
2614-
2615 if thread_id:
2616- self.write(cr, uid, thread_id, {'date_action_last': time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
2617-
2618- return res
2619+ self.write(cr, SUPERUSER_ID, thread_id, {'date_action_last': time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
2620+ return res
2621
2622
2623 class project(osv.Model):
2624
2625=== modified file 'project_issue/project_issue_view.xml'
2626--- project_issue/project_issue_view.xml 2013-04-22 15:34:49 +0000
2627+++ project_issue/project_issue_view.xml 2013-06-06 12:58:46 +0000
2628@@ -68,15 +68,16 @@
2629 <label for="categ_ids" class="oe_edit_only"/>
2630 <field name="categ_ids" widget="many2many_tags"/>
2631 <group>
2632- <group groups="base.group_user">
2633+ <group>
2634 <field name="user_id"
2635 context="{'default_groups_ref': ['base.group_user', 'project.group_project_user']}"/>
2636 <field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)"/>
2637 <field name="email_from"/>
2638- <label for="project_id" groups="base.group_user"/>
2639- <div groups="base.group_user">
2640+ <label for="project_id"/>
2641+ <div>
2642 <field name="project_id" on_change="on_change_project(project_id)" class="oe_inline" context="{'default_use_issues':1}"/>
2643- <button name="case_escalate" string="⇒ Escalate" type="object" states="draft,open,pending" class="oe_link"/>
2644+ <button name="case_escalate" string="⇒ Escalate" type="object" states="draft,open,pending" class="oe_link"
2645+ groups="base.group_user"/>
2646 </div>
2647 </group>
2648 <group>
2649@@ -150,8 +151,8 @@
2650 <field name="id"/>
2651 <filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
2652 <separator/>
2653- <filter string="New" icon="terp-document-new" domain="[('state','=','draft')]" help="New Issues"/>
2654- <filter string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/>
2655+ <filter name="filter_new" string="New" icon="terp-document-new" domain="[('state','=','draft')]" help="New Issues"/>
2656+ <filter name="filter_open" string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/>
2657 <separator/>
2658 <filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-"/>
2659 <separator/>
2660@@ -160,13 +161,13 @@
2661 <field name="categ_ids"/>
2662 <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
2663 <group expand="0" string="Group By..." >
2664- <filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
2665- <filter string="Contact" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
2666- <filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
2667- <filter string="Version" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'version_id'}"/>
2668- <filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}"/>
2669- <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
2670- <filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" help="Creation Month"/>
2671+ <filter string="Responsible" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
2672+ <filter string="Contact" name="group_partner_id" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
2673+ <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
2674+ <filter string="Version" name="group_version" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'version_id'}"/>
2675+ <filter string="Priority" name="group_priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}"/>
2676+ <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
2677+ <filter string="Month" name="group_create_date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" help="Creation Month"/>
2678 </group>
2679 </search>
2680 </field>
2681
2682=== modified file 'project_issue_sheet/project_issue_sheet_view.xml'
2683--- project_issue_sheet/project_issue_sheet_view.xml 2012-12-05 05:37:32 +0000
2684+++ project_issue_sheet/project_issue_sheet_view.xml 2013-06-06 12:58:46 +0000
2685@@ -19,7 +19,8 @@
2686 </field>
2687 <xpath expr="//notebook/page[@string='Extra Info']" position="before">
2688 <page string="Worklogs">
2689- <field name="timesheet_ids" colspan="4" nolabel="1" context="{'default_user_id' : user_id, 'default_account_id' : analytic_account_id}">
2690+ <field name="timesheet_ids" colspan="4" nolabel="1" context="{'default_user_id' : user_id, 'default_account_id' : analytic_account_id}"
2691+ groups="base.group_user">
2692 <tree editable="top" string="Timesheets">
2693 <field name="name"/>
2694 <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
2695
2696=== modified file 'project_long_term/project_long_term_view.xml'
2697--- project_long_term/project_long_term_view.xml 2013-02-25 13:38:04 +0000
2698+++ project_long_term/project_long_term_view.xml 2013-06-06 12:58:46 +0000
2699@@ -120,7 +120,8 @@
2700 </field>
2701 <xpath expr="//div[contains(@class, 'oe_kanban_project_list')]" position="inside">
2702 <a t-if="record.use_phases.raw_value"
2703- name="%(act_project_phases)d" type="action">
2704+ name="%(act_project_phases)d" type="action"
2705+ groups="base.group_user">
2706 <span t-if="record.phase_count.raw_value gt 1"><field name="phase_count"/> Phases</span>
2707 <span t-if="record.phase_count.raw_value lt 2"><field name="phase_count"/> Phase</span>
2708 </a>
2709@@ -322,7 +323,7 @@
2710 <field name="inherit_id" ref="project.view_task_search_form"/>
2711 <field name="arch" type="xml">
2712 <field name="user_id" position="before">
2713- <field name="phase_id"/>
2714+ <field name="phase_id" domain="[]"/>
2715 </field>
2716 </field>
2717 </record>
2718
2719=== modified file 'purchase/report/order.rml'
2720--- purchase/report/order.rml 2012-12-18 02:11:23 +0000
2721+++ purchase/report/order.rml 2013-06-06 12:58:46 +0000
2722@@ -94,38 +94,16 @@
2723 <initialize>
2724 <paraStyle name="all" alignment="justify"/>
2725 </initialize>
2726- <paraStyle name="Standard" fontName="Helvetica"/>
2727- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
2728- <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
2729- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
2730- <paraStyle name="Table Contents" fontName="Helvetica"/>
2731- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
2732- <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
2733- <paraStyle name="Index" fontName="Helvetica"/>
2734- <paraStyle name="Footer" fontName="Helvetica"/>
2735- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
2736- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2737- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
2738- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2739- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2740- <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2741- <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2742- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2743- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
2744- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2745- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
2746- <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2747- <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2748- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2749- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
2750- <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2751- <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2752- <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2753- <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2754- <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2755- <paraStyle name="terp_default_Bold_9_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2756- <paraStyle name="terp_default_8_Italic" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2757- <paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2758+ <paraStyle name="terp_header" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2759+ <paraStyle name="terp_tblheader_General" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2760+ <paraStyle name="terp_default_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2761+ <paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2762+ <paraStyle name="terp_tblheader_General_Right" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
2763+ <paraStyle name="terp_default_Centre_8" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2764+ <paraStyle name="terp_default_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2765+ <paraStyle name="terp_default_Bold_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2766+ <paraStyle name="terp_default_Right_9" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2767+ <paraStyle name="terp_default_Bold_9_Right" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2768 <images/>
2769 </stylesheet>
2770 <story>
2771@@ -136,22 +114,22 @@
2772 <blockTable colWidths="180.0,70.0,60.0,80.0,60.0,85.0" repeatRows="1" style="Table_Header_Pur_ord_Line">
2773 <tr>
2774 <td>
2775- <para style="terp_tblheader_General">Description</para>
2776- </td>
2777- <td>
2778- <para style="terp_tblheader_General">Taxes</para>
2779- </td>
2780- <td>
2781- <para style="terp_tblheader_General">Date Req.</para>
2782- </td>
2783- <td>
2784- <para style="terp_tblheader_General_Right">Qty</para>
2785- </td>
2786- <td>
2787- <para style="terp_tblheader_General_Right">Unit Price</para>
2788- </td>
2789- <td>
2790- <para style="terp_tblheader_General_Right">Net Price</para>
2791+ <para style="terp_tblheader_General"><b>Description</b></para>
2792+ </td>
2793+ <td>
2794+ <para style="terp_tblheader_General"><b>Taxes</b></para>
2795+ </td>
2796+ <td>
2797+ <para style="terp_tblheader_General"><b>Date Req.</b></para>
2798+ </td>
2799+ <td>
2800+ <para style="terp_tblheader_General_Right"><b>Qty</b></para>
2801+ </td>
2802+ <td>
2803+ <para style="terp_tblheader_General_Right"><b>Unit Price</b></para>
2804+ </td>
2805+ <td>
2806+ <para style="terp_tblheader_General_Right"><b>Net Price</b></para>
2807 </td>
2808 </tr>
2809 </blockTable>
2810@@ -165,7 +143,7 @@
2811 <blockTable colWidths="253.0" style="Tableau2">
2812 <tr>
2813 <td>
2814- <para style="terp_default_Bold_9">Shipping address :</para>
2815+ <para style="terp_default_Bold_9"><b>Shipping address :</b></para>
2816 <para style="terp_default_9">[[ (o.dest_address_id and o.dest_address_id.name) or (o.warehouse_id and o.warehouse_id.name) or '']]</para>
2817 <para style="terp_default_9">[[ (o.dest_address_id and display_address(o.dest_address_id)) or (o.warehouse_id and display_address(o.warehouse_id.partner_id)) or '']]</para>
2818 </td>
2819@@ -195,24 +173,24 @@
2820 <para style="terp_default_9">
2821 <font color="white"> </font>
2822 </para>
2823- <para style="terp_header">[[ o.state=='draft' and removeParentNode('para') ]] Purchase Order Confirmation N° [[ o.name ]]</para>
2824- <para style="terp_header">[[ o.state&lt;&gt;'draft' and removeParentNode('para') ]] Request for Quotation N° [[ o.name ]]</para>
2825+ <para style="terp_header"><b>[[ o.state=='draft' and removeParentNode('para') ]] Purchase Order Confirmation N° [[ o.name ]]</b></para>
2826+ <para style="terp_header"><b>[[ o.state&lt;&gt;'draft' and removeParentNode('para') ]] Request for Quotation N° [[ o.name ]]</b></para>
2827 <para style="terp_default_8">
2828 <font color="white"> </font>
2829 </para>
2830 <blockTable colWidths="136.0,132.0,133.0,133.0" style="Header_Order_Reference_Tbl">
2831 <tr>
2832 <td>
2833- <para style="terp_tblheader_General_Centre">Our Order Reference</para>
2834- </td>
2835- <td>
2836- <para style="terp_tblheader_General_Centre">Your Order Reference</para>
2837- </td>
2838- <td>
2839- <para style="terp_tblheader_General_Centre">Order Date</para>
2840- </td>
2841- <td>
2842- <para style="terp_tblheader_General_Centre">Validated By</para>
2843+ <para style="terp_tblheader_General_Centre"><b>Our Order Reference</b></para>
2844+ </td>
2845+ <td>
2846+ <para style="terp_tblheader_General_Centre"><b>Your Order Reference</b></para>
2847+ </td>
2848+ <td>
2849+ <para style="terp_tblheader_General_Centre"><b>Order Date</b></para>
2850+ </td>
2851+ <td>
2852+ <para style="terp_tblheader_General_Centre"><b>Validated By</b></para>
2853 </td>
2854 </tr>
2855 </blockTable>
2856@@ -238,22 +216,22 @@
2857 <blockTable colWidths="180.0,70.0,60.0,80.0,60.0,85.0" repeatRows="1" style="Table_Header_Pur_ord_Line">
2858 <tr>
2859 <td>
2860- <para style="terp_tblheader_General">Description</para>
2861- </td>
2862- <td>
2863- <para style="terp_tblheader_General">Taxes</para>
2864- </td>
2865- <td>
2866- <para style="terp_tblheader_General">Date Req.</para>
2867- </td>
2868- <td>
2869- <para style="terp_tblheader_General_Right">Qty</para>
2870- </td>
2871- <td>
2872- <para style="terp_tblheader_General_Right">Unit Price</para>
2873- </td>
2874- <td>
2875- <para style="terp_tblheader_General_Right">Net Price</para>
2876+ <para style="terp_tblheader_General"><b>Description</b></para>
2877+ </td>
2878+ <td>
2879+ <para style="terp_tblheader_General"><b>Taxes</b></para>
2880+ </td>
2881+ <td>
2882+ <para style="terp_tblheader_General"><b>Date Req.</b></para>
2883+ </td>
2884+ <td>
2885+ <para style="terp_tblheader_General_Right"><b>Qty</b></para>
2886+ </td>
2887+ <td>
2888+ <para style="terp_tblheader_General_Right"><b>Unit Price</b></para>
2889+ </td>
2890+ <td>
2891+ <para style="terp_tblheader_General_Right"><b>Net Price</b></para>
2892 </td>
2893 </tr>
2894 </blockTable>
2895@@ -316,10 +294,10 @@
2896 </para>
2897 </td>
2898 <td>
2899- <para style="terp_default_Bold_9">Total :</para>
2900+ <para style="terp_default_Bold_9"><b>Total :</b></para>
2901 </td>
2902 <td>
2903- <para style="terp_default_Bold_9_Right">[[ formatLang(o.amount_total, digits=get_digits(dp='Account') , currency_obj=o.pricelist_id.currency_id) ]]</para>
2904+ <para style="terp_default_Bold_9_Right"><b>[[ formatLang(o.amount_total, digits=get_digits(dp='Account') , currency_obj=o.pricelist_id.currency_id) ]]</b></para>
2905 </td>
2906 </tr>
2907 </blockTable>
2908
2909=== modified file 'purchase/report/request_quotation.rml'
2910--- purchase/report/request_quotation.rml 2012-12-15 16:23:09 +0000
2911+++ purchase/report/request_quotation.rml 2013-06-06 12:58:46 +0000
2912@@ -36,40 +36,17 @@
2913 <initialize>
2914 <paraStyle name="all" alignment="justify"/>
2915 </initialize>
2916- <paraStyle name="P1" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2917- <paraStyle name="Standard" fontName="Helvetica"/>
2918- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
2919- <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
2920- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
2921- <paraStyle name="Table Contents" fontName="Helvetica"/>
2922- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
2923- <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
2924- <paraStyle name="Index" fontName="Helvetica"/>
2925- <paraStyle name="Footer" fontName="Helvetica"/>
2926- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
2927- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2928- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
2929- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2930- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2931- <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2932- <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2933- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2934- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
2935- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2936- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
2937- <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2938- <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2939- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2940- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
2941- <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2942- <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2943- <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2944- <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2945- <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2946- <paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2947- <paraStyle name="terp_default_8_italic" rightIndent="0.0" leftIndent="20.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2948- <paraStyle name="terp_default_Note" rightIndent="0.0" leftIndent="9.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2949- <paraStyle name="Space bet user and signature" fontName="Helvetica" fontSize="4.0" leading="5" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2950+ <paraStyle name="P1" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2951+ <paraStyle name="Standard"/>
2952+ <paraStyle name="terp_header" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
2953+ <paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
2954+ <paraStyle name="terp_default_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2955+ <paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
2956+ <paraStyle name="terp_default_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2957+ <paraStyle name="terp_default_Bold_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2958+ <paraStyle name="terp_default_Centre_9" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
2959+ <paraStyle name="terp_default_Right_9" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
2960+ <paraStyle name="Space bet user and signature" fontSize="4.0" leading="5" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
2961 <images/>
2962 </stylesheet>
2963 <story>
2964@@ -84,7 +61,7 @@
2965 <blockTable colWidths="250.0" style="Tableau2">
2966 <tr>
2967 <td>
2968- <para style="terp_default_Bold_9">Expected Delivery address:</para>
2969+ <para style="terp_default_Bold_9"><b>Expected Delivery address:</b></para>
2970 <para style="terp_default_9">[[ (order.dest_address_id and order.dest_address_id.name) or (order.warehouse_id and order.warehouse_id.name) or '']]</para>
2971 <para style="P1">[[ order.dest_address_id and display_address(order.dest_address_id) ]]</para>
2972 </td>
2973@@ -114,20 +91,20 @@
2974 <para style="Standard">
2975 <font color="white"> </font>
2976 </para>
2977- <para style="terp_header">Request for Quotation : [[order.name]]</para>
2978+ <para style="terp_header"><b>Request for Quotation : [[order.name]]</b></para>
2979 <para style="terp_default_8">
2980 <font color="white"> </font>
2981 </para>
2982 <blockTable colWidths="371.0,98.0,61.0" repeatRows="1" style="Table_Product_Header_Title">
2983 <tr>
2984 <td>
2985- <para style="terp_tblheader_Details">Description</para>
2986- </td>
2987- <td>
2988- <para style="terp_tblheader_Details_Centre">Expected Date</para>
2989- </td>
2990- <td>
2991- <para style="terp_tblheader_Details_Centre">Qty</para>
2992+ <para style="terp_tblheader_Details"><b>Description</b></para>
2993+ </td>
2994+ <td>
2995+ <para style="terp_tblheader_Details_Centre"><b>Expected Date</b></para>
2996+ </td>
2997+ <td>
2998+ <para style="terp_tblheader_Details_Centre"><b>Qty</b></para>
2999 </td>
3000 </tr>
3001 </blockTable>
3002
3003=== modified file 'report_webkit/webkit_report.py'
3004--- report_webkit/webkit_report.py 2013-05-21 12:23:59 +0000
3005+++ report_webkit/webkit_report.py 2013-06-06 12:58:46 +0000
3006@@ -280,7 +280,7 @@
3007 template = False
3008
3009 if report_xml.report_file :
3010- path = get_module_resource(*report_xml.report_file.split(os.path.sep))
3011+ path = get_module_resource(*report_xml.report_file.split('/'))
3012 if path and os.path.exists(path) :
3013 template = file(path).read()
3014 if not template and report_xml.report_webkit_data :
3015
3016=== modified file 'sale/report/sale_order.rml'
3017--- sale/report/sale_order.rml 2013-03-18 13:56:54 +0000
3018+++ sale/report/sale_order.rml 2013-06-06 12:58:46 +0000
3019@@ -89,40 +89,19 @@
3020 <initialize>
3021 <paraStyle name="all" alignment="justify"/>
3022 </initialize>
3023- <paraStyle name="Standard" fontName="Helvetica"/>
3024- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
3025- <paraStyle name="Heading" fontName="Helvetica" fontSize="8.0" leading="10" spaceBefore="12.0" spaceAfter="6.0"/>
3026- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
3027- <paraStyle name="Table Contents" fontName="Helvetica"/>
3028- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
3029- <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
3030- <paraStyle name="Index" fontName="Helvetica"/>
3031- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
3032- <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3033- <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3034- <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3035- <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3036- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
3037- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
3038- <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
3039- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
3040- <paraStyle name="Footer" fontName="Helvetica"/>
3041- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
3042- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
3043- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
3044- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
3045- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
3046- <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
3047- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
3048- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
3049- <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3050- <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
3051- <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
3052- <paraStyle name="terp_default_1" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3053- <paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
3054- <paraStyle name="terp_default_Italic" rightIndent="0.0" leftIndent="20.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3055- <paraStyle name="Preformatted Text" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
3056- <paraStyle name="terp_default_Centre_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
3057+ <paraStyle name="terp_header" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
3058+ <paraStyle name="terp_default_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3059+ <paraStyle name="terp_default_Bold_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3060+ <paraStyle name="terp_default_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3061+ <paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
3062+ <paraStyle name="terp_default_Centre_8" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
3063+ <paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
3064+ <paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
3065+ <paraStyle name="terp_tblheader_Details_Right" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
3066+ <paraStyle name="terp_default_Centre_9" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
3067+ <paraStyle name="terp_default_Right_9" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
3068+ <paraStyle name="terp_default_1" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
3069+ <paraStyle name="terp_default_Right_9_Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
3070 <images/>
3071 </stylesheet>
3072 <story>
3073@@ -133,22 +112,22 @@
3074 <blockTable colWidths="181.0,70.0,80.0,70.0,50.0,85.0" repeatRows="1" style="Table4">
3075 <tr>
3076 <td>
3077- <para style="terp_tblheader_Details">Description</para>
3078- </td>
3079- <td>
3080- <para style="terp_tblheader_Details_Centre">Tax</para>
3081- </td>
3082- <td>
3083- <para style="terp_tblheader_Details_Right">Quantity</para>
3084- </td>
3085- <td>
3086- <para style="terp_tblheader_Details_Right">Unit Price</para>
3087- </td>
3088- <td>
3089- <para style="terp_tblheader_Details_Centre">Disc.(%)</para>
3090- </td>
3091- <td>
3092- <para style="terp_tblheader_Details_Right">Price</para>
3093+ <para style="terp_tblheader_Details"><b>Description</b></para>
3094+ </td>
3095+ <td>
3096+ <para style="terp_tblheader_Details_Centre"><b>Tax</b></para>
3097+ </td>
3098+ <td>
3099+ <para style="terp_tblheader_Details_Right"><b>Quantity</b></para>
3100+ </td>
3101+ <td>
3102+ <para style="terp_tblheader_Details_Right"><b>Unit Price</b></para>
3103+ </td>
3104+ <td>
3105+ <para style="terp_tblheader_Details_Centre"><b>Disc.(%)</b></para>
3106+ </td>
3107+ <td>
3108+ <para style="terp_tblheader_Details_Right"><b>Price</b></para>
3109 </td>
3110 </tr>
3111 </blockTable>
3112@@ -162,13 +141,13 @@
3113 <blockTable colWidths="265.0,51.0,225.0" style="Table1">
3114 <tr>
3115 <td>
3116- <para style="terp_default_Bold_9">Shipping address :</para>
3117+ <para style="terp_default_Bold_9"><b>Shipping address :</b></para>
3118 <para style="terp_default_9">[[ (o.partner_shipping_id and o.partner_id.title and o.partner_shipping_id.title.name) or '' ]] [[ (o.partner_shipping_id and o.partner_shipping_id.name) or '' ]]</para>
3119 <para style="terp_default_9">[[ o.partner_shipping_id and display_address(o.partner_shipping_id) ]]</para>
3120 <para style="terp_default_9">
3121 <font color="white"> </font>
3122 </para>
3123- <para style="terp_default_Bold_9">Invoice address :</para>
3124+ <para style="terp_default_Bold_9"><b>Invoice address :</b></para>
3125 <para style="terp_default_9">[[ (o.partner_invoice_id and o.partner_invoice_id.title and o.partner_invoice_id.title.name) or '' ]] [[ (o.partner_invoice_id and o.partner_invoice_id.name) or '' ]]</para>
3126 <para style="terp_default_9">[[ o.partner_invoice_id and display_address(o.partner_invoice_id) ]] </para>
3127 </td>
3128@@ -195,25 +174,25 @@
3129 <para style="terp_default_8">
3130 <font color="white"> </font>
3131 </para>
3132- <para style="terp_header">[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Quotation N° [[ o.name ]]</para>
3133- <para style="terp_header">[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Order N° [[ o.name ]]</para>
3134+ <para style="terp_header"><b>[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Quotation N° [[ o.name ]]</b></para>
3135+ <para style="terp_header"><b>[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Order N° [[ o.name ]]</b></para>
3136 <para style="terp_default_8">
3137 <font color="white"> </font>
3138 </para>
3139 <blockTable colWidths="132.0,134.0,135.0,135.0" style="Table2">
3140 <tr>
3141 <td>
3142- <para style="terp_tblheader_General_Centre">Your Reference </para>
3143- </td>
3144- <td>
3145- <para style="terp_tblheader_General_Centre">[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Date Ordered</para>
3146- <para style="terp_tblheader_General_Centre">[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Quotation Date</para>
3147- </td>
3148- <td>
3149- <para style="terp_tblheader_General_Centre">Salesperson</para>
3150- </td>
3151- <td>
3152- <para style="terp_tblheader_General_Centre">Payment Term</para>
3153+ <para style="terp_tblheader_General_Centre"><b>Your Reference </b></para>
3154+ </td>
3155+ <td>
3156+ <para style="terp_tblheader_General_Centre"><b>[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Date Ordered</b></para>
3157+ <para style="terp_tblheader_General_Centre"><b>[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Quotation Date</b></para>
3158+ </td>
3159+ <td>
3160+ <para style="terp_tblheader_General_Centre"><b>Salesperson</b></para>
3161+ </td>
3162+ <td>
3163+ <para style="terp_tblheader_General_Centre"><b>Payment Term</b></para>
3164 </td>
3165 </tr>
3166 </blockTable>
3167@@ -239,22 +218,22 @@
3168 <blockTable colWidths="181.0,70.0,80.0,70.0,50.0,85.0" repeatRows="1" style="Table4">
3169 <tr>
3170 <td>
3171- <para style="terp_tblheader_Details">Description</para>
3172- </td>
3173- <td>
3174- <para style="terp_tblheader_Details_Centre">Tax</para>
3175- </td>
3176- <td>
3177- <para style="terp_tblheader_Details_Right">Quantity</para>
3178- </td>
3179- <td>
3180- <para style="terp_tblheader_Details_Right">Unit Price</para>
3181- </td>
3182- <td>
3183- <para style="terp_tblheader_Details_Centre">[[not show_discount(user.id) and removeParentNode('para') ]]Disc.(%)</para>
3184- </td>
3185- <td>
3186- <para style="terp_tblheader_Details_Right">Price</para>
3187+ <para style="terp_tblheader_Details"><b>Description</b></para>
3188+ </td>
3189+ <td>
3190+ <para style="terp_tblheader_Details_Centre"><b>Tax</b></para>
3191+ </td>
3192+ <td>
3193+ <para style="terp_tblheader_Details_Right"><b>Quantity</b></para>
3194+ </td>
3195+ <td>
3196+ <para style="terp_tblheader_Details_Right"><b>Unit Price</b></para>
3197+ </td>
3198+ <td>
3199+ <para style="terp_tblheader_Details_Centre"><b>[[not show_discount(user.id) and removeParentNode('para') ]]Disc.(%)</b></para>
3200+ </td>
3201+ <td>
3202+ <para style="terp_tblheader_Details_Right"><b>Price</b></para>
3203 </td>
3204 </tr>
3205 </blockTable>
3206@@ -317,10 +296,10 @@
3207 </para>
3208 </td>
3209 <td>
3210- <para style="terp_default_Bold_9">Total :</para>
3211+ <para style="terp_default_Bold_9"><b>Total :</b></para>
3212 </td>
3213 <td>
3214- <para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</para>
3215+ <para style="terp_default_Right_9_Bold"><b>[[ formatLang(o.amount_total, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</b></para>
3216 </td>
3217 </tr>
3218 </blockTable>
3219
3220=== modified file 'sale/res_partner.py'
3221--- sale/res_partner.py 2012-12-06 14:56:32 +0000
3222+++ sale/res_partner.py 2013-06-06 12:58:46 +0000
3223@@ -41,7 +41,7 @@
3224
3225 default.update({'sale_order_ids': []})
3226
3227- super(res_partner, self).copy(cr, uid, record_id, default, context)
3228+ return super(res_partner, self).copy(cr, uid, record_id, default, context)
3229
3230 _columns = {
3231 'sale_order_count': fields.function(_sale_order_count, string='# of Sales Order', type='integer'),
3232
3233=== modified file 'sale/sale.py'
3234--- sale/sale.py 2013-06-04 12:30:26 +0000
3235+++ sale/sale.py 2013-06-06 12:58:46 +0000
3236@@ -695,7 +695,7 @@
3237 _description = 'Sales Order Line'
3238 _columns = {
3239 'order_id': fields.many2one('sale.order', 'Order Reference', required=True, ondelete='cascade', select=True, readonly=True, states={'draft':[('readonly',False)]}),
3240- 'name': fields.text('Description', required=True, select=True, readonly=True, states={'draft': [('readonly', False)]}),
3241+ 'name': fields.text('Description', required=True, readonly=True, states={'draft': [('readonly', False)]}),
3242 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of sales order lines."),
3243 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True),
3244 'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True),
3245
3246=== modified file 'sale_margin/sale_margin_view.xml'
3247--- sale_margin/sale_margin_view.xml 2012-11-29 22:26:45 +0000
3248+++ sale_margin/sale_margin_view.xml 2013-06-06 12:58:46 +0000
3249@@ -9,7 +9,7 @@
3250 <field name="arch" type="xml">
3251 <xpath expr="//group[@name='sale_total']" position="after">
3252 <group name="sale_margin_grp">
3253- <field name="margin" widget='monetary' options="{'currency_field': 'currency_id'}"/>
3254+ <field name="margin" widget='monetary' options="{'currency_field': 'currency_id'}" groups="base.group_user"/>
3255 </group>
3256 </xpath>
3257 </field>
3258
3259=== modified file 'sale_stock/test/cancel_order_sale_stock.yml'
3260--- sale_stock/test/cancel_order_sale_stock.yml 2013-02-13 08:35:19 +0000
3261+++ sale_stock/test/cancel_order_sale_stock.yml 2013-06-06 12:58:46 +0000
3262@@ -8,7 +8,7 @@
3263 -
3264 !python {model: stock.picking}: |
3265 delivery_orders = self.search(cr, uid, [('sale_id','=',ref("sale.sale_order_8"))])
3266- first_picking = self.browse(cr, uid, delivery_orders[0], context=context)
3267+ first_picking = self.browse(cr, uid, delivery_orders[-1], context=context)
3268 if first_picking.force_assign(cr, uid, first_picking):
3269 first_move = first_picking.move_lines[0]
3270 values = {'move%s'%(first_move.id): {'product_qty': 2, 'product_uom':ref('product.product_uom_unit')}}
3271@@ -18,7 +18,7 @@
3272 -
3273 !python {model: stock.picking}: |
3274 delivery_orders = self.search(cr, uid, [('sale_id','=',ref("sale.sale_order_8"))])
3275- last_delivery_order_id = delivery_orders[0]
3276+ last_delivery_order_id = delivery_orders[-1]
3277 self.pool.get('stock.picking').signal_button_cancel(cr, uid, [last_delivery_order_id])
3278 -
3279 I run the scheduler.
3280
3281=== modified file 'share/wizard/share_wizard.py'
3282--- share/wizard/share_wizard.py 2013-05-23 13:33:31 +0000
3283+++ share/wizard/share_wizard.py 2013-06-06 12:58:46 +0000
3284@@ -414,7 +414,8 @@
3285 relation_model_id = model_obj.search(cr, UID_ROOT, [('model','=',coldef._obj)])[0]
3286 relation_model_browse = model_obj.browse(cr, UID_ROOT, relation_model_id, context=context)
3287 relation_osv = self.pool[coldef._obj]
3288- if coltype == 'one2many':
3289+ #skip virtual one2many fields (related, ...) as there is no reverse relationship
3290+ if coltype == 'one2many' and hasattr(coldef, '_fields_id'):
3291 # don't record reverse path if it's not a real m2o (that happens, but rarely)
3292 dest_model_ci = relation_osv._all_columns
3293 reverse_rel = coldef._fields_id
3294
3295=== modified file 'stock/stock.py'
3296--- stock/stock.py 2013-05-21 12:23:59 +0000
3297+++ stock/stock.py 2013-06-06 12:58:46 +0000
3298@@ -543,6 +543,7 @@
3299 _name = "stock.picking"
3300 _inherit = ['mail.thread']
3301 _description = "Picking List"
3302+ _order = "id desc"
3303
3304 def _set_maximum_date(self, cr, uid, ids, name, value, arg, context=None):
3305 """ Calculates planned date if it is greater than 'value'.
3306
3307=== modified file 'stock/wizard/stock_partial_picking.py'
3308--- stock/wizard/stock_partial_picking.py 2012-12-17 15:23:03 +0000
3309+++ stock/wizard/stock_partial_picking.py 2013-06-06 12:58:46 +0000
3310@@ -144,7 +144,7 @@
3311 def _partial_move_for(self, cr, uid, move):
3312 partial_move = {
3313 'product_id' : move.product_id.id,
3314- 'quantity' : move.product_qty if move.state in ('assigned','draft','confirmed') else 0,
3315+ 'quantity' : move.product_qty if move.state == 'assigned' else 0,
3316 'product_uom' : move.product_uom.id,
3317 'prodlot_id' : move.prodlot_id.id,
3318 'move_id' : move.id,

Subscribers

People subscribed via source and target branches

to all changes: