Merge lp:~unifield-team/unifield-server/us-1279 into lp:unifield-server

Proposed by Quentin THEURET @Amaris
Status: Merged
Merged at revision: 4024
Proposed branch: lp:~unifield-team/unifield-server/us-1279
Merge into: lp:unifield-server
Diff against target: 373 lines (+132/-20) (has conflicts)
9 files modified
bin/addons/msf_doc_import/check_line.py (+25/-1)
bin/addons/msf_doc_import/purchase_order.py (+8/-1)
bin/addons/msf_doc_import/view/purchase_order_import_line_view.xml (+4/-1)
bin/addons/msf_doc_import/wizard/__init__.py (+2/-2)
bin/addons/msf_doc_import/wizard/wizard_import_po_line.py (+80/-15)
bin/addons/msf_profile/i18n/fr_MF.po (+9/-0)
bin/addons/msf_supply_doc_export/report/report_request_for_quotation_xls.mako (+2/-0)
bin/addons/purchase_override/purchase.py (+1/-0)
bin/addons/purchase_override/purchase_view.xml (+1/-0)
Text conflict in bin/addons/msf_profile/i18n/fr_MF.po
To merge this branch: bzr merge lp:~unifield-team/unifield-server/us-1279
Reviewer Review Type Date Requested Status
UniField Dev Team Pending
Review via email: mp+308611@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/addons/msf_doc_import/check_line.py'
--- bin/addons/msf_doc_import/check_line.py 2016-04-19 09:48:16 +0000
+++ bin/addons/msf_doc_import/check_line.py 2016-10-26 10:53:26 +0000
@@ -286,7 +286,9 @@
286 except IndexError:286 except IndexError:
287 comment += _(' Product Code to be defined')287 comment += _(' Product Code to be defined')
288 error_list.append(_('The Product\'s Code has to be defined'))288 error_list.append(_('The Product\'s Code has to be defined'))
289 return {'default_code': default_code, 'proc_type': proc_type, 'comment': comment, 'error_list': error_list, 'price_unit': price_unit, 'cost_price': cost_price}289 return {
290 'default_code': default_code, 'proc_type': proc_type, 'comment': comment, 'error_list': error_list, 'price_unit': price_unit,
291 'cost_price': cost_price, 'product_code':product_code}
290292
291293
292def quantity_value(**kwargs):294def quantity_value(**kwargs):
@@ -611,6 +613,28 @@
611 warning_list.append(_("No comment was defined"))613 warning_list.append(_("No comment was defined"))
612 return {'comment': comment, 'warning_list': warning_list}614 return {'comment': comment, 'warning_list': warning_list}
613615
616
617def line_number_value(**kwargs):
618 '''
619 Retrives line number from Excel file
620 '''
621 row = kwargs["row"]
622 cell_nb = kwargs['cell_nb']
623 line_number = kwargs['to_write']['line_number']
624 error_list = kwargs['to_write']['error_list']
625 try:
626 if not row.cells[cell_nb]:
627 error_list.append(_("No line number was defined"))
628 elif row.cells[cell_nb].type != 'int':
629 error_list.append(_("The line number must be an integer"))
630 else:
631 line_number = row.cells[cell_nb].data
632 except IndexError:
633 error_list.append(_("No line number was defined"))
634 return {'line_number': line_number, 'error_list':error_list}
635
636
637
614def check_lines_currency(rows, ccy_col_index, ccy_expected_code):638def check_lines_currency(rows, ccy_col_index, ccy_expected_code):
615 """639 """
616 check rows currency640 check rows currency
617641
=== modified file 'bin/addons/msf_doc_import/purchase_order.py'
--- bin/addons/msf_doc_import/purchase_order.py 2016-08-18 08:32:03 +0000
+++ bin/addons/msf_doc_import/purchase_order.py 2016-10-26 10:53:26 +0000
@@ -268,6 +268,13 @@
268 if isinstance(ids, (int, long)):268 if isinstance(ids, (int, long)):
269 ids = [ids]269 ids = [ids]
270 context.update({'active_id': ids[0]})270 context.update({'active_id': ids[0]})
271
272 # Check if we are in the case of update of sent RfQ
273 po = self.browse(cr, uid, [ids[0]], context=context)[0]
274 columns = columns_for_po_line_import
275 if not po.rfq_ok or po.state != 'rfq_sent':
276 columns = columns_for_po_line_import[1:]
277
271 columns_header = [(_(f[0]), f[1]) for f in columns_header_for_po_line_import]278 columns_header = [(_(f[0]), f[1]) for f in columns_header_for_po_line_import]
272 default_template = SpreadsheetCreator('Template of import', columns_header, [])279 default_template = SpreadsheetCreator('Template of import', columns_header, [])
273 file = base64.encodestring(default_template.get_xml(default_filters=['decode.utf8']))280 file = base64.encodestring(default_template.get_xml(default_filters=['decode.utf8']))
@@ -275,7 +282,7 @@
275 'filename_template': 'template.xls',282 'filename_template': 'template.xls',
276 'filename': 'Lines_Not_Imported.xls',283 'filename': 'Lines_Not_Imported.xls',
277 'po_id': ids[0],284 'po_id': ids[0],
278 'message': """%s %s""" % (_(GENERIC_MESSAGE), ', '.join([_(f) for f in columns_for_po_line_import]),),285 'message': """%s %s""" % (_(GENERIC_MESSAGE), ', '.join([_(f) for f in columns]),),
279 'state': 'draft', },286 'state': 'draft', },
280 context)287 context)
281 return {'type': 'ir.actions.act_window',288 return {'type': 'ir.actions.act_window',
282289
=== modified file 'bin/addons/msf_doc_import/view/purchase_order_import_line_view.xml'
--- bin/addons/msf_doc_import/view/purchase_order_import_line_view.xml 2016-05-26 08:58:45 +0000
+++ bin/addons/msf_doc_import/view/purchase_order_import_line_view.xml 2016-10-26 10:53:26 +0000
@@ -25,7 +25,7 @@
25 <field name="soq_updated" invisible="1" readonly="1" />25 <field name="soq_updated" invisible="1" readonly="1" />
26 </xpath>26 </xpath>
27 <xpath expr="/form/notebook/page/field[@name='order_line']/tree" position="attributes" >27 <xpath expr="/form/notebook/page/field[@name='order_line']/tree" position="attributes" >
28 <attribute name="colors">red:to_correct_ok == True or inactive_product == True; #C8C8C8: fake_state == 'cancel'; orange:product_qty == 0.00;blue: soq_updated == True</attribute>28 <attribute name="colors">red:to_correct_ok == True or inactive_product == True or red_color == True; #C8C8C8: fake_state == 'cancel'; orange:product_qty == 0.00;blue: soq_updated == True</attribute>
29 </xpath>29 </xpath>
30 <xpath expr="/form/notebook/page[@string='Notes']/field[@name='notes']" position="before">30 <xpath expr="/form/notebook/page[@string='Notes']/field[@name='notes']" position="before">
31 <field name="import_in_progress" readonly="1" invisible="0" />31 <field name="import_in_progress" readonly="1" invisible="0" />
@@ -42,6 +42,9 @@
42 </field>42 </field>
43 </xpath>43 </xpath>
44 <xpath expr="/form/notebook/page[@string='Purchase Order']/field[@name='order_line']" position="before" >44 <xpath expr="/form/notebook/page[@string='Purchase Order']/field[@name='order_line']" position="before" >
45 <button name="wizard_import_po_line" string="Import RfQ lines" icon="gtk-dnd" type="object" attrs="{'invisible':[('state', '!=', 'rfq_sent')]}"/>
46 </xpath>
47 <xpath expr="/form/notebook/page[@string='Purchase Order']/field[@name='order_line']" position="before" >
45 <group name="import" string=" Import Lines " colspan="1" col="4" attrs="{'invisible':[('state', '!=', 'draft')]}">48 <group name="import" string=" Import Lines " colspan="1" col="4" attrs="{'invisible':[('state', '!=', 'draft')]}">
46 <button name="wizard_import_po_line" string="Import lines" icon="gtk-dnd" col="1" type="object" attrs="{'invisible':[('state', '!=', 'draft')]}"/>49 <button name="wizard_import_po_line" string="Import lines" icon="gtk-dnd" col="1" type="object" attrs="{'invisible':[('state', '!=', 'draft')]}"/>
47 <button name="button_remove_lines" string="Delete Lines" icon="gtk-remove" colspan="1" type="object" attrs="{'invisible': ['|', ('po_from_fo', '=', True), ('po_from_ir', '=', True)]}" />50 <button name="button_remove_lines" string="Delete Lines" icon="gtk-remove" colspan="1" type="object" attrs="{'invisible': ['|', ('po_from_fo', '=', True), ('po_from_ir', '=', True)]}" />
4851
=== modified file 'bin/addons/msf_doc_import/wizard/__init__.py'
--- bin/addons/msf_doc_import/wizard/__init__.py 2016-09-12 08:55:55 +0000
+++ bin/addons/msf_doc_import/wizard/__init__.py 2016-10-26 10:53:26 +0000
@@ -54,8 +54,8 @@
54#Important NOTE: I didn't set the fields of type date with the attribute 'date' (2nd part of the tuple) because for Excel, when a date is empty, the field becomes '1899-30-12' as default. So I set 'string' instead for the fields date.54#Important NOTE: I didn't set the fields of type date with the attribute 'date' (2nd part of the tuple) because for Excel, when a date is empty, the field becomes '1899-30-12' as default. So I set 'string' instead for the fields date.
5555
56PO_COLUMNS_HEADER_FOR_IMPORT=[56PO_COLUMNS_HEADER_FOR_IMPORT=[
57(_('Product Code'), 'string'), (_('Product Description'), 'string'), (_('Quantity'), 'number'), (_('UoM'), 'string'), (_('Price'), 'number'),57(_('Line Number'), 'number'), (_('Product Code'), 'string'), (_('Product Description'), 'string'), (_('Quantity'), 'number'), (_('UoM'), 'string'), (_('Price'), 'number'),
58(_('Delivery Request Date'), 'date'), (_('Currency'), 'string'), (_('Comment'), 'string'), (_('Justification Code'), 'string'), (_('Justification Coordination'), 'string'), (_('HQ Remarks'), 'string'), (_('Justification Y/N'), 'string')]58(_('Delivery Request Date'), 'date'), (_('Currency'), 'string'), (_('Comment'), 'string'), (_('Justification Code'), 'string'), (_('Justification Coordination'), 'string'), (_('HQ Remarks'), 'string'), (_('Justification Y/N'), 'string'),]
59PO_LINE_COLUMNS_FOR_IMPORT = [x for (x, y) in PO_COLUMNS_HEADER_FOR_IMPORT]59PO_LINE_COLUMNS_FOR_IMPORT = [x for (x, y) in PO_COLUMNS_HEADER_FOR_IMPORT]
6060
61FO_COLUMNS_HEADER_FOR_IMPORT=[61FO_COLUMNS_HEADER_FOR_IMPORT=[
6262
=== modified file 'bin/addons/msf_doc_import/wizard/wizard_import_po_line.py'
--- bin/addons/msf_doc_import/wizard/wizard_import_po_line.py 2016-08-26 10:10:58 +0000
+++ bin/addons/msf_doc_import/wizard/wizard_import_po_line.py 2016-10-26 10:53:26 +0000
@@ -96,30 +96,38 @@
96 or not wiz.po_id.pricelist_id.currency_id:96 or not wiz.po_id.pricelist_id.currency_id:
97 raise osv.except_osv(_("Error!"), _("Order currency not found!"))97 raise osv.except_osv(_("Error!"), _("Order currency not found!"))
9898
99 ignore_lines, complete_lines, lines_to_correct = 0, 0, 099 ignore_lines, complete_lines, lines_to_correct, created_lines = 0, 0, 0, 0
100 line_ignored_num, error_list = [], []100 line_ignored_num, error_list = [], []
101 error_log, message = '', ''101 error_log, message = '', ''
102 header_index = context['header_index']102 header_index = context['header_index']
103 template_col_count = len(header_index)103 template_col_count = len(header_index)
104 mandatory_col_count = 7104 is_rfq = wiz.po_id.rfq_ok and wiz.po_id.state == 'rfq_sent'
105 mandatory_col_count = 8 if is_rfq else 7
105106
106 file_obj = SpreadsheetXML(xmlstring=base64.decodestring(wiz.file))107 file_obj = SpreadsheetXML(xmlstring=base64.decodestring(wiz.file))
107108
108 """109 """
109 1st path: check currency in lines in phasis with document110 1st path: check currency in lines in phasis with document
110 REF-94: BECAREFUL WHEN CHANGING THE ORDER OF CELLS IN THE IMPORT FILE!!!!!111 REF-94: BECAREFUL WHEN CHANGING THE ORDER OF CELLS IN THE IMPORT FILE!!!!!
111 CCY COL INDEX: 6112 CCY COL INDEX: 6 (PO) or 7 (RfQ)
112 """113 """
113 order_currency_code = wiz.po_id.pricelist_id.currency_id.name114 order_currency_code = wiz.po_id.pricelist_id.currency_id.name
114 currency_index = 6115 currency_index = 7 if is_rfq else 6
115 row_iterator = file_obj.getRows()116 row_iterator = file_obj.getRows()
116117
117 # don't use the original118 # don't use the original
118 row_iterator, row_iterator_line_check = itertools.tee(row_iterator)119 row_iterator, row_iterator_line_check = itertools.tee(row_iterator)
119120
120 row_iterator_line_check.next() # skip header line121 row_iterator_line_check.next() # skip header line
121 lines_to_correct = check_line.check_lines_currency(row_iterator_line_check,122 try:
122 currency_index, order_currency_code)123 lines_to_correct = check_line.check_lines_currency(row_iterator_line_check, currency_index, order_currency_code)
124 except Exception as e:
125 message = _("""An error occurs during the check of the currency: %s""") % e
126 categ_log = ''
127 line_num = 0
128 error_list.append(message)
129 logging.getLogger('import purchase order').error('Error %s' % e)
130
123 if lines_to_correct > 0:131 if lines_to_correct > 0:
124 categ_log = ''132 categ_log = ''
125 line_num = 0133 line_num = 0
@@ -129,6 +137,7 @@
129 error_list.append(msg)137 error_list.append(msg)
130138
131 if not error_list:139 if not error_list:
140 line_number_set = set()
132 to_write = {}141 to_write = {}
133 total_line_num = file_obj.getNbRows()142 total_line_num = file_obj.getNbRows()
134 # ignore the header line143 # ignore the header line
@@ -153,13 +162,14 @@
153 'proc_type': 'make_to_order',162 'proc_type': 'make_to_order',
154 'default_code': False,163 'default_code': False,
155 'confirmed_delivery_date': False,164 'confirmed_delivery_date': False,
165 'line_number':'',
156 }166 }
157167
158 col_count = len(row)168 col_count = len(row)
159 if col_count != template_col_count and col_count != mandatory_col_count:169 if col_count != template_col_count and col_count != mandatory_col_count:
160 message += _("Line %s: You should have exactly %s columns in this order: %s \n") % (170 message += _("Line %s: You should have exactly %s columns in this order: %s \n") % (
161 line_num, template_col_count,171 line_num, template_col_count,
162 ','.join(columns_for_po_line_import))172 ','.join(is_rfq and columns_for_po_line_import or columns_for_po_line_import[1:]))
163 line_with_error.append(173 line_with_error.append(
164 wiz_common_import.get_line_values(174 wiz_common_import.get_line_values(
165 cr, uid, ids, row, cell_nb=False,175 cr, uid, ids, row, cell_nb=False,
@@ -176,7 +186,16 @@
176 total_line_num -= 1186 total_line_num -= 1
177 continue187 continue
178188
179 # Cell 0: Product Code189
190 # Cell 0 : Line Number (RfQ)
191 if is_rfq:
192 ln_value = check_line.line_number_value(
193 row=row, cell_nb=header_index[_('Line Number')], to_write=to_write, context=context)
194 to_write.update(
195 line_number=ln_value['line_number'],
196 error_list=ln_value['error_list'])
197
198 # Cell 1: Product Code
180 p_value = check_line.product_value(199 p_value = check_line.product_value(
181 cr, uid, obj_data=obj_data, cell_nb=header_index[_('Product Code')],200 cr, uid, obj_data=obj_data, cell_nb=header_index[_('Product Code')],
182 product_obj=product_obj, row=row, to_write=to_write, context=context)201 product_obj=product_obj, row=row, to_write=to_write, context=context)
@@ -211,7 +230,7 @@
211 to_write.update(product_qty=round_qty['value']['product_qty'])230 to_write.update(product_qty=round_qty['value']['product_qty'])
212 warn_list = to_write['warning_list']231 warn_list = to_write['warning_list']
213 warn_list.append(round_qty['warning']['message'])232 warn_list.append(round_qty['warning']['message'])
214 #message += _("Line %s in the Excel file: %s\n") % (line_num, round_qty['warning']['message'])233 #message += _("Line %s in the Excel file: %s\n") % (line_num, round_qty['warning']['message'])
215234
216 # Cell 4: Price235 # Cell 4: Price
217 price_value = check_line.compute_price_value(236 price_value = check_line.compute_price_value(
@@ -245,11 +264,14 @@
245 to_write.update(264 to_write.update(
246 comment=c_value['comment'],265 comment=c_value['comment'],
247 warning_list=c_value['warning_list'])266 warning_list=c_value['warning_list'])
267
268
248 to_write.update(269 to_write.update(
249 to_correct_ok=any(to_write['error_list']), # the lines with to_correct_ok=True will be red270 to_correct_ok=any(to_write['error_list']), # the lines with to_correct_ok=True will be red
250 show_msg_ok=any(to_write['warning_list']), # the lines with show_msg_ok=True won't change color, it is just info271 show_msg_ok=any(to_write['warning_list']), # the lines with show_msg_ok=True won't change color, it is just info
251 order_id=wiz.po_id.id,272 order_id=wiz.po_id.id,
252 text_error='\n'.join(to_write['error_list'] + to_write['warning_list']))273 text_error='\n'.join(to_write['error_list'] + to_write['warning_list']))
274
253 # we check consistency on the model of on_change functions to call for updating values275 # we check consistency on the model of on_change functions to call for updating values
254 purchase_line_obj.check_line_consistency(276 purchase_line_obj.check_line_consistency(
255 cr, uid, wiz.po_id.id, to_write=to_write, context=context)277 cr, uid, wiz.po_id.id, to_write=to_write, context=context)
@@ -264,9 +286,50 @@
264 cr.rollback()286 cr.rollback()
265 continue287 continue
266288
267 # write order line on PO289
268 purchase_line_obj.create(cr, uid, to_write, context=context)290 if is_rfq:
269 vals['order_line'].append((0, 0, to_write))291 rfq_line_ids = purchase_line_obj.search(cr, uid, [('order_id', '=', wiz.po_id.id), ('line_number', '=', to_write['line_number'])])
292 to_write['rfq_ok'] = True
293
294 # CASE 1: the line is not registered in the system, so CREATE it :
295 if not rfq_line_ids:
296 created_lines += 1
297 if wiz.po_id.tender_id:
298 msg = _('Warning! You are adding new lines which did not exist in the original tender!')
299 if msg not in message:
300 message += msg
301 to_write.update({
302 'line_number': False,
303 'red_color': True,
304 })
305 purchase_line_obj.create(cr, uid, to_write, context=context)
306
307 # CASE 2: the line is already in the system, so UPDATE it :
308 for po_line in purchase_line_obj.browse(cr, uid, rfq_line_ids, context=context):
309 # some checks :
310 if to_write['line_number'] in line_number_set:
311 raise osv.except_osv(_('Error'), _("the same line number appears several times"))
312 else:
313 line_number_set.add(to_write['line_number'])
314 if p_value['product_code'] != po_line.product_id.default_code:
315 raise osv.except_osv(_('Error'), _("Product code from system and from import must be the same."))
316 if not price_value['price_unit_defined']:
317 raise osv.except_osv(_('Error'), _("Price must be defined in the RfQ import file."))
318
319 # in case of update we do not want to update qty and uom values :
320 if to_write.has_key('product_qty'):
321 to_write.pop('product_qty')
322 if to_write.has_key('product_uom'):
323 to_write.pop('product_uom')
324
325 # update POL :
326 purchase_line_obj.write(cr, uid, rfq_line_ids, to_write, context=context)
327
328 else: # its not RfQ
329 purchase_line_obj.create(cr, uid, to_write, context=context)
330
331 vals['order_line'].append((0, 0, to_write))
332
270 if to_write['error_list']:333 if to_write['error_list']:
271 lines_to_correct += 1334 lines_to_correct += 1
272 complete_lines += 1335 complete_lines += 1
@@ -327,13 +390,13 @@
327 final_message = _('''390 final_message = _('''
328%s391%s
329Importation completed in %s!392Importation completed in %s!
330# of imported lines : %s on %s lines393# of imported lines : %s on %s lines (%s updated and %s created)
331# of ignored lines: %s394# of ignored lines: %s
332# of lines to correct: %s395# of lines to correct: %s
333%s396%s
334397
335%s398%s
336''') % (categ_log, total_time, complete_lines, line_num, ignore_lines, lines_to_correct, error_log, message)399''') % (categ_log, total_time, complete_lines, line_num, complete_lines-created_lines,created_lines, ignore_lines, lines_to_correct, error_log, message)
337 wizard_vals['message'] = final_message400 wizard_vals['message'] = final_message
338 if line_with_error:401 if line_with_error:
339 file_to_export = wiz_common_import.export_file_with_error(402 file_to_export = wiz_common_import.export_file_with_error(
@@ -371,8 +434,10 @@
371 header_index = wiz_common_import.get_header_index(434 header_index = wiz_common_import.get_header_index(
372 cr, uid, ids, first_row, error_list=[], line_num=0, context=context)435 cr, uid, ids, first_row, error_list=[], line_num=0, context=context)
373 context.update({'po_id': po_id, 'header_index': header_index})436 context.update({'po_id': po_id, 'header_index': header_index})
437 rfq = purchase_obj.read(cr, uid, po_id, ['state', 'rfq_ok'], context=context)
438 is_rfq = rfq['rfq_ok'] and rfq['state'] == 'rfq_sent'
374 res, res1 = wiz_common_import.check_header_values(439 res, res1 = wiz_common_import.check_header_values(
375 cr, uid, ids, context, header_index, columns_for_po_line_import,440 cr, uid, ids, context, header_index, is_rfq and columns_for_po_line_import or columns_for_po_line_import[1:],
376 origin='PO')441 origin='PO')
377 if not res:442 if not res:
378 return self.write(cr, uid, ids, res1, context)443 return self.write(cr, uid, ids, res1, context)
379444
=== modified file 'bin/addons/msf_profile/i18n/fr_MF.po'
--- bin/addons/msf_profile/i18n/fr_MF.po 2016-10-21 15:36:56 +0000
+++ bin/addons/msf_profile/i18n/fr_MF.po 2016-10-26 10:53:26 +0000
@@ -74611,6 +74611,7 @@
74611" Number of columns is not equal to %s"74611" Number of columns is not equal to %s"
74612msgstr "\n"74612msgstr "\n"
74613" Le nombre de colonnes n'est pas égal à %s"74613" Le nombre de colonnes n'est pas égal à %s"
74614<<<<<<< TREE
7461474615
74615#. module: specific_rules74616#. module: specific_rules
74616#: report:addons/specific_rules/report/report_stock_inventory_all_locations_xls.mako:14374617#: report:addons/specific_rules/report/report_stock_inventory_all_locations_xls.mako:143
@@ -74683,3 +74684,11 @@
74683msgid "You can't search on this object without using at least one exact search term (precede your search with the character '=')."74684msgid "You can't search on this object without using at least one exact search term (precede your search with the character '=')."
74684msgstr "Vous ne pouvez pas exécuter de recherche sur cet objet sans utiliser au moins une recherche exacte (ajoutez le caractère = devant votre filtre)."74685msgstr "Vous ne pouvez pas exécuter de recherche sur cet objet sans utiliser au moins une recherche exacte (ajoutez le caractère = devant votre filtre)."
7468574686
74687=======
74688
74689#. module: msf_doc_import
74690#: code:addons/msf_doc_import/wizard/wizard_import_po_line.py:300
74691#, python-format
74692msgid "Warning! You are adding new lines which did not exist in the original tender!"
74693msgstr "Attention ! Vous avez ajouté une nouvelle ligne qui n'existe pas dans l'appel d'offre original !"
74694>>>>>>> MERGE-SOURCE
7468674695
=== modified file 'bin/addons/msf_supply_doc_export/report/report_request_for_quotation_xls.mako'
--- bin/addons/msf_supply_doc_export/report/report_request_for_quotation_xls.mako 2014-04-29 14:10:16 +0000
+++ bin/addons/msf_supply_doc_export/report/report_request_for_quotation_xls.mako 2016-10-26 10:53:26 +0000
@@ -66,6 +66,7 @@
66<Column ss:AutoFitWidth="1" ss:Width="250" />66<Column ss:AutoFitWidth="1" ss:Width="250" />
67 67
68 <Row>68 <Row>
69 <Cell ss:StyleID="header" ><Data ss:Type="String">${_('Line Number')}</Data></Cell>
69 <Cell ss:StyleID="header" ><Data ss:Type="String">${_('Product Code')}</Data></Cell>70 <Cell ss:StyleID="header" ><Data ss:Type="String">${_('Product Code')}</Data></Cell>
70 <Cell ss:StyleID="header" ><Data ss:Type="String">${_('Product Description')}</Data></Cell>71 <Cell ss:StyleID="header" ><Data ss:Type="String">${_('Product Description')}</Data></Cell>
71 <Cell ss:StyleID="header" ><Data ss:Type="String">${_('Quantity')}</Data></Cell>72 <Cell ss:StyleID="header" ><Data ss:Type="String">${_('Quantity')}</Data></Cell>
@@ -77,6 +78,7 @@
77 </Row>78 </Row>
78 % for line in o.order_line:79 % for line in o.order_line:
79 <Row>80 <Row>
81 <Cell ss:StyleID="line" ><Data ss:Type="Number">${(line.line_number or '')|x}</Data></Cell>
80 <Cell ss:StyleID="line" ><Data ss:Type="String">${(line.product_id.default_code or '')|x}</Data></Cell>82 <Cell ss:StyleID="line" ><Data ss:Type="String">${(line.product_id.default_code or '')|x}</Data></Cell>
81 <Cell ss:StyleID="line" ><Data ss:Type="String">${(line.product_id.name or '')|x}</Data></Cell>83 <Cell ss:StyleID="line" ><Data ss:Type="String">${(line.product_id.name or '')|x}</Data></Cell>
82 <Cell ss:StyleID="line" ><Data ss:Type="Number">${(line.product_qty or '')|x}</Data></Cell>84 <Cell ss:StyleID="line" ><Data ss:Type="Number">${(line.product_qty or '')|x}</Data></Cell>
8385
=== modified file 'bin/addons/purchase_override/purchase.py'
--- bin/addons/purchase_override/purchase.py 2016-10-16 10:55:55 +0000
+++ bin/addons/purchase_override/purchase.py 2016-10-26 10:53:26 +0000
@@ -3708,6 +3708,7 @@
3708 string='SoQ updated',3708 string='SoQ updated',
3709 readonly=True,3709 readonly=True,
3710 ),3710 ),
3711 'red_color': fields.boolean(string='Red color'),
3711 }3712 }
37123713
3713 _defaults = {3714 _defaults = {
37143715
=== modified file 'bin/addons/purchase_override/purchase_view.xml'
--- bin/addons/purchase_override/purchase_view.xml 2016-08-03 12:08:12 +0000
+++ bin/addons/purchase_override/purchase_view.xml 2016-10-26 10:53:26 +0000
@@ -146,6 +146,7 @@
146 </xpath>146 </xpath>
147147
148 <xpath expr="/form/notebook//tree//field[@name='price_subtotal']" position="after">148 <xpath expr="/form/notebook//tree//field[@name='price_subtotal']" position="after">
149 <field name="red_color" invisible="1" />
149 <field name="rfq_ok" invisible="1" />150 <field name="rfq_ok" invisible="1" />
150 <field name="tender_line_id" invisible="1" />151 <field name="tender_line_id" invisible="1" />
151 <field name="fake_state" invisible="1" />152 <field name="fake_state" invisible="1" />

Subscribers

People subscribed via source and target branches

to all changes: