diff --git a/addons/account/process/customer_invoice_process.xml b/addons/account/process/customer_invoice_process.xml
index 51e8254d20e..b34dca0dbb9 100644
--- a/addons/account/process/customer_invoice_process.xml
+++ b/addons/account/process/customer_invoice_process.xml
@@ -122,7 +122,6 @@
-->
-
@@ -131,7 +130,6 @@
-
@@ -140,7 +138,6 @@
-
@@ -150,7 +147,6 @@
-
@@ -159,7 +155,6 @@
-
@@ -168,7 +163,6 @@
-
@@ -177,7 +171,6 @@
-
@@ -186,7 +179,6 @@
-
diff --git a/addons/account/process/statement_process.xml b/addons/account/process/statement_process.xml
index 704f9f47025..01fd4bc1bfe 100644
--- a/addons/account/process/statement_process.xml
+++ b/addons/account/process/statement_process.xml
@@ -65,7 +65,6 @@
-->
-
@@ -74,7 +73,6 @@
-
@@ -84,7 +82,6 @@
-
diff --git a/addons/account/process/supplier_invoice_process.xml b/addons/account/process/supplier_invoice_process.xml
index e24431c48b4..8635b083d72 100644
--- a/addons/account/process/supplier_invoice_process.xml
+++ b/addons/account/process/supplier_invoice_process.xml
@@ -1,21 +1,21 @@
-
-
-
+
-
-
-
+
@@ -26,7 +26,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
@@ -48,7 +48,7 @@
-
+
@@ -60,7 +60,7 @@
-
+
@@ -70,7 +70,7 @@
-
+
@@ -81,7 +81,7 @@
-
+
@@ -92,7 +92,7 @@
-
+
@@ -103,22 +103,20 @@
-
-
-
+
-
-
+
-
@@ -126,51 +124,46 @@
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
diff --git a/addons/base_contact/process/base_contact_process.xml b/addons/base_contact/process/base_contact_process.xml
index 876905c1812..f5b754e7ad9 100644
--- a/addons/base_contact/process/base_contact_process.xml
+++ b/addons/base_contact/process/base_contact_process.xml
@@ -60,7 +60,6 @@
-->
-
@@ -69,7 +68,6 @@
-
@@ -78,7 +76,6 @@
-
diff --git a/addons/crm/process/crm_configuration_process.xml b/addons/crm/process/crm_configuration_process.xml
index 362c8982b96..790aad82fc8 100644
--- a/addons/crm/process/crm_configuration_process.xml
+++ b/addons/crm/process/crm_configuration_process.xml
@@ -57,7 +57,6 @@
-->
-
@@ -66,7 +65,6 @@
-
@@ -75,7 +73,6 @@
-
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py
index f87c4bf750e..ee82c917351 100644
--- a/addons/email_template/email_template.py
+++ b/addons/email_template/email_template.py
@@ -331,38 +331,34 @@ This is useful for CRM leads for example"),
default.update({'name':new_name})
return super(email_template, self).copy(cr, uid, id, default, context)
- def compute_pl(self,
- model_object_field,
- sub_model_object_field,
- null_value, template_language='mako'):
+ def build_expression(self, field_name, sub_field_name, null_value, template_language='mako'):
"""
- Returns the expression based on data provided
- @param model_object_field: First level field
- @param sub_model_object_field: Second level drilled down field (M2O)
- @param null_value: What has to be returned if the value is empty
- @param template_language: The language used for templating
+ Returns a template expression based on data provided
+ @param field_name: field name
+ @param sub_field_name: sub field name (M2O)
+ @param null_value: default value if the target value is empty
+ @param template_language: name of template engine
@return: computed expression
"""
- #Configure for MAKO
- copy_val = ''
+
+ expression = ''
if template_language == 'mako':
- if model_object_field:
- copy_val = "${object." + model_object_field
- if sub_model_object_field:
- copy_val += "." + sub_model_object_field
- if null_value:
- copy_val += " or '" + null_value + "'"
- if model_object_field:
- copy_val += "}"
+ if field_name:
+ expression = "${object." + field_name
+ if sub_field_name:
+ expression += "." + sub_field_name
+ if null_value:
+ expression += " or '''%s'''" % null_value
+ expression += "}"
elif template_language == 'django':
- if model_object_field:
- copy_val = "{{object." + model_object_field
- if sub_model_object_field:
- copy_val += "." + sub_model_object_field
- if null_value:
- copy_val = copy_val + '|default:"' + null_value + '"'
- copy_val = copy_val + "}}"
- return copy_val
+ if field_name:
+ expression = "{{object." + field_name
+ if sub_field_name:
+ expression += "." + sub_field_name
+ if null_value:
+ expression += "|default: '''%s'''" % null_value
+ expression += "}}"
+ return expression
def onchange_model_object_field(self, cr, uid, ids, model_object_field, template_language, context=None):
if not model_object_field:
@@ -374,7 +370,7 @@ This is useful for CRM leads for example"),
res_ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', field_obj.relation)], context=context)
if res_ids:
result['sub_object'] = res_ids[0]
- result['copyvalue'] = self.compute_pl(False,
+ result['copyvalue'] = self.build_expression(False,
False,
False,
template_language)
@@ -383,7 +379,7 @@ This is useful for CRM leads for example"),
else:
#Its a simple field... just compute placeholder
result['sub_object'] = False
- result['copyvalue'] = self.compute_pl(field_obj.name,
+ result['copyvalue'] = self.build_expression(field_obj.name,
False,
False,
template_language
@@ -402,7 +398,7 @@ This is useful for CRM leads for example"),
sub_field_obj = self.pool.get('ir.model.fields').browse(cr, uid, sub_model_object_field, context)
if res_ids:
result['sub_object'] = res_ids[0]
- result['copyvalue'] = self.compute_pl(field_obj.name,
+ result['copyvalue'] = self.build_expression(field_obj.name,
sub_field_obj.name,
False,
template_language
@@ -412,7 +408,7 @@ This is useful for CRM leads for example"),
else:
#Its a simple field... just compute placeholder
result['sub_object'] = False
- result['copyvalue'] = self.compute_pl(field_obj.name,
+ result['copyvalue'] = self.build_expression(field_obj.name,
False,
False,
template_language
@@ -431,7 +427,7 @@ This is useful for CRM leads for example"),
sub_field_obj = self.pool.get('ir.model.fields').browse(cr, uid, sub_model_object_field, context)
if res_ids:
result['sub_object'] = res_ids[0]
- result['copyvalue'] = self.compute_pl(field_obj.name,
+ result['copyvalue'] = self.build_expression(field_obj.name,
sub_field_obj.name,
null_value,
template_language
@@ -441,7 +437,7 @@ This is useful for CRM leads for example"),
else:
#Its a simple field... just compute placeholder
result['sub_object'] = False
- result['copyvalue'] = self.compute_pl(field_obj.name,
+ result['copyvalue'] = self.build_expression(field_obj.name,
False,
null_value,
template_language
diff --git a/addons/event/event.py b/addons/event/event.py
index ea4a9cf9b8b..88910f01914 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -303,7 +303,7 @@ class event_registration(osv.osv):
'name': fields.char('Summary', size=124, readonly=True, states={'draft': [('readonly', False)]}),
'email_cc': fields.text('CC', size=252 , readonly=False, states={'done': [('readonly', True)]}, help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"),
'nb_register': fields.integer('Quantity', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="Number of Registrations or Tickets"),
- 'event_id': fields.many2one('event.event', 'Event Related', required=True, readonly=True, states={'draft': [('readonly', False)]}),
+ 'event_id': fields.many2one('event.event', 'Event', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'partner_id': fields.many2one('res.partner', 'Partner', states={'done': [('readonly', True)]}),
"partner_invoice_id": fields.many2one('res.partner', 'Partner Invoiced', readonly=True, states={'draft': [('readonly', False)]}),
"contact_id": fields.many2one('res.partner.contact', 'Partner Contact', readonly=False, states={'done': [('readonly', True)]}), #TODO: filter only the contacts that have a function into the selected partner_id
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index f58a948fad2..27874237332 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -219,27 +219,27 @@
-
-
+
+
-
-
+
-
+
+
+
+
-
-
-
@@ -287,11 +287,11 @@
tree
-
-
+
-
+
+
@@ -335,9 +335,9 @@
+
-
@@ -460,27 +460,26 @@
-
-
+
+
-
-
-
+
+
+
+
+
-
-
-
diff --git a/addons/hr/process/hr_process.xml b/addons/hr/process/hr_process.xml
index 5376936afe3..1471fbe5352 100644
--- a/addons/hr/process/hr_process.xml
+++ b/addons/hr/process/hr_process.xml
@@ -51,7 +51,6 @@
-->
-
@@ -60,7 +59,6 @@
-
diff --git a/addons/hr_expense/process/hr_expense_process.xml b/addons/hr_expense/process/hr_expense_process.xml
index 20d8a60ca1a..bcb9649be4c 100644
--- a/addons/hr_expense/process/hr_expense_process.xml
+++ b/addons/hr_expense/process/hr_expense_process.xml
@@ -1,21 +1,21 @@
-
+
-
+
-
+
-
+
@@ -26,7 +26,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
@@ -48,7 +48,7 @@
-
+
@@ -59,7 +59,7 @@
-
+
@@ -70,7 +70,7 @@
-
+
@@ -81,7 +81,7 @@
-
+
@@ -92,96 +92,90 @@
-
+
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
+
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/addons/hr_holidays/process/hr_holidays_process.xml b/addons/hr_holidays/process/hr_holidays_process.xml
index 2026902dd5c..82285ff1209 100644
--- a/addons/hr_holidays/process/hr_holidays_process.xml
+++ b/addons/hr_holidays/process/hr_holidays_process.xml
@@ -1,21 +1,21 @@
-
-
+
+
-
+
-
+
-
+
@@ -25,7 +25,7 @@
-
+
@@ -36,7 +36,7 @@
-
+
@@ -47,7 +47,7 @@
-
+
@@ -58,7 +58,7 @@
-
+
@@ -69,7 +69,7 @@
-
+
@@ -80,7 +80,7 @@
-
+
@@ -89,91 +89,85 @@
-
-
+
+
-
-
+
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml
index 22453dccfa4..7c259016fca 100644
--- a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml
+++ b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml
@@ -101,7 +101,6 @@
-
@@ -110,7 +109,6 @@
-
@@ -119,7 +117,6 @@
-
@@ -129,7 +126,6 @@
-
@@ -138,7 +134,6 @@
-
@@ -147,7 +142,6 @@
-
diff --git a/addons/membership/process/membership_process.xml b/addons/membership/process/membership_process.xml
index 4a6df4c0e03..730f01bd36b 100644
--- a/addons/membership/process/membership_process.xml
+++ b/addons/membership/process/membership_process.xml
@@ -1,21 +1,21 @@
-
+
-
+
-
+
-
+
@@ -25,7 +25,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
@@ -45,7 +45,7 @@
-
+
@@ -56,7 +56,7 @@
-
+
@@ -67,7 +67,7 @@
-
+
@@ -78,62 +78,57 @@
-
+
-
+
-
-
+
-
-
+
-
+
-
-
+
-
-
+
-
-
+
\ No newline at end of file
diff --git a/addons/mrp/process/procurement_process.xml b/addons/mrp/process/procurement_process.xml
index ca08481d4e4..5b9c8d8f661 100644
--- a/addons/mrp/process/procurement_process.xml
+++ b/addons/mrp/process/procurement_process.xml
@@ -1,7 +1,7 @@
-
+
@@ -14,7 +14,7 @@
-
+
@@ -36,7 +36,7 @@
-
+
@@ -60,7 +60,7 @@
-
+
@@ -128,7 +128,6 @@
-
@@ -137,7 +136,6 @@
-
@@ -146,7 +144,6 @@
-
@@ -155,7 +152,6 @@
-
@@ -164,7 +160,6 @@
-
@@ -173,7 +168,6 @@
-
@@ -182,7 +176,6 @@
-
@@ -191,7 +184,6 @@
-
@@ -200,7 +192,6 @@
-
@@ -209,7 +200,6 @@
-
@@ -218,7 +208,6 @@
-
@@ -227,7 +216,6 @@
-
diff --git a/addons/mrp/process/service_product_process.xml b/addons/mrp/process/service_product_process.xml
index c23ed6e7a65..74353d02e8c 100644
--- a/addons/mrp/process/service_product_process.xml
+++ b/addons/mrp/process/service_product_process.xml
@@ -36,7 +36,6 @@
-->
-
diff --git a/addons/mrp/process/stockable_product_process.xml b/addons/mrp/process/stockable_product_process.xml
index 9dc45f0515f..c845801194b 100644
--- a/addons/mrp/process/stockable_product_process.xml
+++ b/addons/mrp/process/stockable_product_process.xml
@@ -66,7 +66,6 @@
-->
-
@@ -75,7 +74,6 @@
-
diff --git a/addons/mrp_operations/process/mrp_operation_process.xml b/addons/mrp_operations/process/mrp_operation_process.xml
index 2b59b87cfaf..686f59fe27f 100644
--- a/addons/mrp_operations/process/mrp_operation_process.xml
+++ b/addons/mrp_operations/process/mrp_operation_process.xml
@@ -72,7 +72,6 @@
-->
-
@@ -81,7 +80,6 @@
-
@@ -90,7 +88,6 @@
-
@@ -99,7 +96,6 @@
-
diff --git a/addons/process/process_view.xml b/addons/process/process_view.xml
index 72cb18499e2..1a5714437b8 100644
--- a/addons/process/process_view.xml
+++ b/addons/process/process_view.xml
@@ -282,9 +282,6 @@
-
-
-
diff --git a/addons/product/process/product_process.xml b/addons/product/process/product_process.xml
index c8f72be4df7..03ce904abad 100644
--- a/addons/product/process/product_process.xml
+++ b/addons/product/process/product_process.xml
@@ -40,7 +40,6 @@
-->
-
diff --git a/addons/project/process/task_process.xml b/addons/project/process/task_process.xml
index b3490ce4cf1..1c5fba12596 100644
--- a/addons/project/process/task_process.xml
+++ b/addons/project/process/task_process.xml
@@ -2,20 +2,20 @@
-
-
+
-
-
-
+
@@ -26,7 +26,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
@@ -48,7 +48,7 @@
-
+
@@ -59,77 +59,74 @@
-
-
-
+
-
-
+
-
-
+
-
-
-
-
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index 39564c90896..365f217dee4 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -101,7 +101,7 @@
-
+
diff --git a/addons/project_scrum/process/project_scrum_process.xml b/addons/project_scrum/process/project_scrum_process.xml
index 9700677c100..b5503f0127c 100644
--- a/addons/project_scrum/process/project_scrum_process.xml
+++ b/addons/project_scrum/process/project_scrum_process.xml
@@ -22,7 +22,6 @@
-->
-
diff --git a/addons/project_timesheet/process/project_timesheet_process.xml b/addons/project_timesheet/process/project_timesheet_process.xml
index 4bb6a6de381..aea15d814c1 100644
--- a/addons/project_timesheet/process/project_timesheet_process.xml
+++ b/addons/project_timesheet/process/project_timesheet_process.xml
@@ -43,7 +43,6 @@
-->
-
@@ -52,7 +51,6 @@
-
@@ -61,7 +59,6 @@
-
diff --git a/addons/sale/process/sale_process.xml b/addons/sale/process/sale_process.xml
index 4d6ca31d973..2c61e55c4e4 100644
--- a/addons/sale/process/sale_process.xml
+++ b/addons/sale/process/sale_process.xml
@@ -189,7 +189,6 @@
-
@@ -198,7 +197,6 @@
-
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index fef8f21000f..ad418a567bc 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -423,8 +423,14 @@ class sale_order(osv.osv):
pay_term = order.payment_term.id
else:
pay_term = False
+ invoiced_sale_line_ids = self.pool.get('sale.order.line').search(cr, uid, [('order_id', '=', order.id), ('invoiced', '=', True)], context=context)
+ from_line_invoice_ids = []
+ for invoiced_sale_line_id in self.pool.get('sale.order.line').browse(cr, uid, invoiced_sale_line_ids, context=context):
+ for invoice_line_id in invoiced_sale_line_id.invoice_lines:
+ if invoice_line_id.invoice_id.id not in from_line_invoice_ids:
+ from_line_invoice_ids.append(invoice_line_id.invoice_id.id)
for preinv in order.invoice_ids:
- if preinv.state not in ('cancel',):
+ if preinv.state not in ('cancel',) and preinv.id not in from_line_invoice_ids:
for preline in preinv.invoice_line:
inv_line_id = self.pool.get('account.invoice.line').copy(cr, uid, preline.id, {'invoice_id': False, 'price_unit': -preline.price_unit})
lines.append(inv_line_id)
@@ -471,7 +477,6 @@ class sale_order(osv.osv):
lines = []
for line in o.order_line:
if line.invoiced:
- #raise osv.except_osv(_('Error !'), _('The Sale Order already has some lines invoiced. You should continue the billing process by line.'))
continue
elif (line.state in states):
lines.append(line.id)
diff --git a/addons/sale_crm/process/sale_crm_process.xml b/addons/sale_crm/process/sale_crm_process.xml
index 44f78fcdd55..721508a2ba5 100644
--- a/addons/sale_crm/process/sale_crm_process.xml
+++ b/addons/sale_crm/process/sale_crm_process.xml
@@ -39,7 +39,6 @@
-
@@ -49,7 +48,6 @@
-
@@ -58,7 +56,6 @@
-
@@ -67,7 +64,6 @@
-
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index c4d10369ec4..5c219067090 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -913,7 +913,6 @@
-
diff --git a/addons/test.txt b/addons/test.txt
deleted file mode 100644
index 55e60eb73a8..00000000000
--- a/addons/test.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-this is a test file:
--------------------
-the purpose is to test the buidlbot engine
-
-how to do?
-we simply gonna make several commit in a local branch, and also several commits in the main branch, then merge and see what happens
-
-iii
diff --git a/addons/test2.text b/addons/test2.text
deleted file mode 100644
index 535d2b01d33..00000000000
--- a/addons/test2.text
+++ /dev/null
@@ -1,8 +0,0 @@
-1
-2
-3
-4
-5
-6
-7
-8