Merge lp:~jfb-tempo-consulting/unifield-server/US-10835 into lp:unifield-server

Proposed by jftempo
Status: Merged
Merged at revision: 6471
Proposed branch: lp:~jfb-tempo-consulting/unifield-server/US-10835
Merge into: lp:unifield-server
Diff against target: 2911 lines (+1839/-65) (has conflicts)
35 files modified
bin/addons/account_hq_entries/__init__.py (+2/-22)
bin/addons/account_hq_entries/__openerp__.py (+3/-0)
bin/addons/account_hq_entries/account_view.xml (+156/-1)
bin/addons/account_hq_entries/esc_invoice.py (+203/-0)
bin/addons/account_hq_entries/esc_line_installer.xml (+48/-0)
bin/addons/account_hq_entries/esc_line_report.xml (+42/-0)
bin/addons/account_hq_entries/hq_entries.py (+0/-1)
bin/addons/account_hq_entries/report/__init__.py (+2/-0)
bin/addons/account_hq_entries/report/esc_line_import_report.py (+45/-0)
bin/addons/account_hq_entries/report/esc_line_import_template.mako (+111/-0)
bin/addons/account_hq_entries/report/finance_cost_price.py (+104/-0)
bin/addons/account_hq_entries/wizard/__init__.py (+1/-0)
bin/addons/account_hq_entries/wizard/esc_lines_import.py (+351/-0)
bin/addons/account_hq_entries/wizard/esc_lines_import_view.xml (+89/-0)
bin/addons/delivery_mechanism/delivery_mechanism.py (+80/-5)
bin/addons/msf_audittrail/data/audittrail_hq_entry.yml (+28/-0)
bin/addons/msf_printed_documents/printed_report.xml (+1/-0)
bin/addons/msf_profile/data/patches.xml (+7/-0)
bin/addons/msf_profile/i18n/fr_MF.po (+501/-30)
bin/addons/msf_profile/msf_profile.py (+11/-0)
bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv (+1/-1)
bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv (+2/-0)
bin/addons/product/product.py (+10/-0)
bin/addons/product_attributes/product_attributes.py (+6/-0)
bin/addons/product_attributes/product_attributes_view.xml (+2/-0)
bin/addons/purchase/purchase_order_line.py (+1/-0)
bin/addons/stock/stock_move.py (+8/-2)
bin/addons/sync_client/update.py (+6/-1)
bin/addons/sync_common/common.py (+1/-0)
bin/addons/sync_server/rules.py (+7/-1)
bin/addons/sync_server/rules_view.xml (+1/-1)
bin/addons/sync_server/sync_server.py (+3/-0)
bin/addons/sync_server/update.py (+3/-0)
bin/addons/sync_so/purchase.py (+1/-0)
bin/addons/unifield_setup/setup_configuration.py (+2/-0)
Text conflict in bin/addons/msf_profile/data/patches.xml
Text conflict in bin/addons/msf_profile/i18n/fr_MF.po
Text conflict in bin/addons/msf_profile/msf_profile.py
To merge this branch: bzr merge lp:~jfb-tempo-consulting/unifield-server/US-10835
Reviewer Review Type Date Requested Status
UniField Reviewer Team Pending
Review via email: mp+440711@code.launchpad.net
To post a comment you must log in.
6441. By jftempo

Delete draft entries

6442. By jftempo

Ignore duplicates / report with errors / unicity constraint on all fields

6443. By jftempo

Import: unicity constraint with NULL, button to reset or keep wizard

6444. By jftempo

import error if qty <= 0

6445. By jftempo

French translations

6446. By jftempo

French translations

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/addons/account_hq_entries/__init__.py'
--- bin/addons/account_hq_entries/__init__.py 2012-08-14 09:25:23 +0000
+++ bin/addons/account_hq_entries/__init__.py 2023-05-05 12:01:38 +0000
@@ -1,29 +1,9 @@
1#!/usr/bin/env python1#!/usr/bin/env python
2# -*- coding: utf-8 -*-2# -*- coding: utf-8 -*-
3##############################################################################
4#
5# OpenERP, Open Source Management Solution
6# Copyright (C) 2011 TeMPO Consulting, MSF. All Rights Reserved
7# Developer: Olivier DOSSMANN
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU Affero General Public License as
11# published by the Free Software Foundation, either version 3 of the
12# License, or (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU Affero General Public License for more details.
18#
19# You should have received a copy of the GNU Affero General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21#
22##############################################################################
233
24import res_company4import res_company
25import hq_entries5import hq_entries
26import wizard6import wizard
27import account7import account
288import esc_invoice
29# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:9import report
3010
=== modified file 'bin/addons/account_hq_entries/__openerp__.py'
--- bin/addons/account_hq_entries/__openerp__.py 2017-09-28 14:05:02 +0000
+++ bin/addons/account_hq_entries/__openerp__.py 2023-05-05 12:01:38 +0000
@@ -33,6 +33,9 @@
33 'security/ir.model.access.csv',33 'security/ir.model.access.csv',
34 'wizard/wizard_view.xml',34 'wizard/wizard_view.xml',
35 'account_view.xml',35 'account_view.xml',
36 'esc_line_installer.xml',
37 'wizard/esc_lines_import_view.xml',
38 'esc_line_report.xml',
36 ],39 ],
37 "demo_xml" : [],40 "demo_xml" : [],
38 "test": [41 "test": [
3942
=== modified file 'bin/addons/account_hq_entries/account_view.xml'
--- bin/addons/account_hq_entries/account_view.xml 2022-10-13 12:32:09 +0000
+++ bin/addons/account_hq_entries/account_view.xml 2023-05-05 12:01:38 +0000
@@ -329,7 +329,162 @@
329 <menuitem id="menu_hq" name="HQ" parent="account.menu_finance" sequence="6"/>329 <menuitem id="menu_hq" name="HQ" parent="account.menu_finance" sequence="6"/>
330 <menuitem name="HQ Import" action="action_hq_entries_import_wizard" type="server" id="menu_hq_entries_import" parent="menu_hq" sequence="1"/>330 <menuitem name="HQ Import" action="action_hq_entries_import_wizard" type="server" id="menu_hq_entries_import" parent="menu_hq" sequence="1"/>
331 <menuitem name="HQ Entries" action="action_hq_entries_tree" id="menu_hq_entries" parent="menu_hq" sequence="2"/>331 <menuitem name="HQ Entries" action="action_hq_entries_tree" id="menu_hq_entries" parent="menu_hq" sequence="2"/>
332 332
333
334 <record id="esc_invoice_line_filter" model="ir.ui.view">
335 <field name="name">International Invoices Lines</field>
336 <field name="model">esc.invoice.line</field>
337 <field name="type">search</field>
338 <field name="arch" type="xml">
339 <search string="International Invoices Lines">
340 <filter icon="gtk-new" string="Not Done" domain="[('state', '!=', 'done')]" />
341 <filter icon="gtk-apply" string="Done" domain="[('state', '=', 'done')]" />
342 <separator orientation="vertical"/>
343 <field name="po_name" />
344 <field name="product_id" />
345 <field name="requestor_cc_id" />
346 <field name="consignee_cc_id"/>
347 <field name="shipment_ref"/>
348 <newline/>
349 <group expand="0" string="Group By..." colspan="12" col="10">
350 <filter string="PO Reference" icon="terp-partner" domain="[]" context="{'group_by':'po_name'}"/>
351 <separator orientation="vertical"/>
352 <filter string="Product" icon="terp-folder-green" context="{'group_by':'product_id'}"/>
353 <separator orientation="vertical"/>
354 <filter string="Requestor" icon="terp-go-month" domain="[]" context="{'group_by':'requestor_cc_id'}"/>
355 <separator orientation="vertical"/>
356 <filter string="Consignee" icon="gtk-about" domain="[]" context="{'group_by': 'consignee_cc_id'}"/>
357 </group>
358 <newline/>
359 </search>
360 </field>
361 </record>
362
363 <record id="esc_invoice_line_tree" model="ir.ui.view">
364 <field name="name">International Invoices Lines</field>
365 <field name="model">esc.invoice.line</field>
366 <field name="type">tree</field>
367 <field name="arch" type="xml">
368 <tree string="International Invoices Line" editable="top" hide_new_button="1" hide_delete_button="1" hide_edit_button="1" noteditable="1">
369 <field name="po_name" readonly="1"/>
370 <field name="product_id" readonly="1" />
371 <field name="requestor_cc_id" readonly="1" />
372 <field name="consignee_cc_id" readonly="1" />
373 <field name="shipment_ref" readonly="1" />
374 <field name="price_unit" readonly="1" />
375 <field name="currency_id" readonly="1" />
376 <field name="product_qty" readonly="1" />
377 <field name="remaining_qty" readonly="1" />
378 <field name="in_number" />
379 <field name="state" readonly="1" />
380 <button name="delete" string="Delete" icon="gtk-del" type="object" states='1_draft' confirm="Do you want to delete this line ?" />
381 </tree>
382 </field>
383 </record>
384
385 <record id="esc_invoice_line_form" model="ir.ui.view">
386 <field name="name">International Invoices Lines</field>
387 <field name="model">esc.invoice.line</field>
388 <field name="type">form</field>
389 <field name="arch" type="xml">
390 <form string="International Invoices Line" hide_new_button="1" hide_duplicate_button="1">
391 <field name="po_name" readonly="1" />
392 <field name="product_id" readonly="1" />
393 <field name="requestor_cc_id" readonly="1" />
394 <field name="consignee_cc_id" readonly="1" />
395 <field name="shipment_ref" readonly="1" />
396 <field name="price_unit" readonly="1" />
397 <field name="product_qty" readonly="1" />
398 <field name="remaining_qty" readonly="1" />
399 <field name="uom_id" readonly="1" />
400 <field name="currency_id" readonly="1" />
401 <field name="in_number" />
402 <field name="state" readonly="1" />
403 </form>
404 </field>
405 </record>
406
407 <record model="ir.actions.act_window" id="esc_invoice_line_action">
408 <field name="name">International Invoices Lines</field>
409 <field name="res_model">esc.invoice.line</field>
410 <field name="view_type">form</field>
411 <field name="view_mode">tree,form</field>
412 <field name="view_id" ref="esc_invoice_line_tree"/>
413 </record>
414 <menuitem name="International Invoices Lines" action="esc_invoice_line_action" id="esc_invoice_line_menu" parent="menu_hq" sequence="20"/>
415
416
417
418 <record id="finance_price_track_changes_filter" model="ir.ui.view">
419 <field name="name">Line Matching</field>
420 <field name="model">finance_price.track_changes</field>
421 <field name="type">search</field>
422 <field name="arch" type="xml">
423 <search string="Line Matching">
424 <field name="product_id" />
425 <field name="stock_picking_id" />
426 <field name="matching_type" />
427 <field name="esc_invoice_line_id"/>
428 <newline/>
429 </search>
430 </field>
431 </record>
432
433 <record id="finance_price_track_changes_tree" model="ir.ui.view">
434 <field name="name">Line Matching</field>
435 <field name="model">finance_price.track_changes</field>
436 <field name="type">tree</field>
437 <field name="arch" type="xml">
438 <tree string="Line Matching" editable="top" hide_new_button="1" hide_delete_button="1" hide_edit_button="1" noteditable="1">
439 <field name="product_id" />
440 <field name="old_price" />
441 <field name="new_price" />
442 <field name="qty_processed" />
443 <field name="price_unit" />
444 <field name="stock_before" />
445 <field name="stock_picking_id" />
446 <field name="stock_move_id" />
447 <field name="purchase_oder_line_id" />
448 <field name="esc_invoice_line_id" />
449 <field name="matching_type" />
450 </tree>
451 </field>
452 </record>
453
454 <record model="ir.actions.act_window" id="finance_price_track_changes_action">
455 <field name="name">Line Matching</field>
456 <field name="res_model">finance_price.track_changes</field>
457 <field name="view_type">form</field>
458 <field name="view_mode">tree,form</field>
459 <field name="context">{'display_move_line': True}</field>
460 </record>
461 <menuitem name="Line Matching" action="finance_price_track_changes_action" id="finance_price_track_changes_menu" parent="menu_hq" sequence="30"/>
462
463 <act_window
464 id="esc_line_to_finance_price_tc"
465 name="Matching"
466 src_model="esc.invoice.line"
467 res_model="finance_price.track_changes"
468 target="current"
469 view_type="form"
470 view_mode="tree"
471 context="{'display_move_line': True}"
472 domain="[('esc_invoice_line_id', 'in', active_ids)]" />
473
474 <record id="esc_line_delete_action" model="ir.actions.server">
475 <field name="name">Delete Selected draft entries</field>
476 <field name="model_id" ref="model_esc_invoice_line"/>
477 <field name="state">code</field>
478 <field name="code">action = obj.delete_action(context=context)</field>
479 </record>
480
481 <record id="esc_line_delete_menu" model="ir.values">
482 <field name="key2">client_action_multi</field>
483 <field name="model">esc.invoice.line</field>
484 <field name="name">Delete Selected draft entries</field>
485 <field eval="'ir.actions.server,%d'%esc_line_delete_action" name="value"/>
486 <field eval="True" name="object"/>
487 </record>
333488
334 </data>489 </data>
335</openerp>490</openerp>
336491
=== added file 'bin/addons/account_hq_entries/esc_invoice.py'
--- bin/addons/account_hq_entries/esc_invoice.py 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/esc_invoice.py 2023-05-05 12:01:38 +0000
@@ -0,0 +1,203 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4from osv import osv
5from osv import fields
6import decimal_precision as dp
7from tools.translate import _
8
9
10class esc_invoice_line(osv.osv):
11 _name = 'esc.invoice.line'
12 _description = 'International Invoices Line'
13 _rec_name = 'po_name'
14 _order = 'id desc'
15 _sync_order = 'id'
16 _trace = True
17
18 def _auto_init(self, cr, context=None):
19 super(esc_invoice_line, self)._auto_init(cr, context)
20 if not cr.index_exists('esc_invoice_line', 'esc_invoice_line_line_unique_all_field_idx'):
21 cr.execute("CREATE UNIQUE INDEX esc_invoice_line_line_unique_all_field_idx ON esc_invoice_line (po_name,requestor_cc_id,coalesce(consignee_cc_id, 0),product_id,product_qty,price_unit,coalesce(shipment_ref,''),currency_id)")
22
23
24 def _get_dest_instance_id(self, cr, uid, ids, field_name, args, context=None):
25 res = {}
26 cur_instance = self.pool.get('res.company')._get_instance_record(cr, uid)
27 if cur_instance.level != 'section':
28 hq_id = cur_instance.parent_id.parent_id and cur_instance.parent_id.parent_id.id or cur_instance.parent_id.id or False
29 for _id in ids:
30 res[_id] = hq_id
31 return res
32
33 for esc_line in self.browse(cr, uid, ids, fields_to_fetch=['requestor_cc_id', 'consignee_cc_id'], context=context):
34 cc = esc_line.consignee_cc_id or esc_line.requestor_cc_id
35 res[esc_line.id] = cc.po_fo_cc_instance_ids and cc.po_fo_cc_instance_ids[0].id or False
36 return res
37
38 def _get_in_number(self, cr, uid, ids, field_name, args, context=None):
39 res = {}
40 if not ids:
41 return {}
42
43 for _id in ids:
44 res[_id] = False
45
46 cr.execute('''
47 select
48 tc.esc_invoice_line_id, string_agg(distinct(pick.name),' ' order by pick.name)
49 from
50 finance_price_track_changes tc, stock_move m, stock_picking pick
51 where
52 m.id = tc.stock_move_id
53 and m.picking_id = pick.id
54 and tc.esc_invoice_line_id in %s
55 group by
56 tc.esc_invoice_line_id
57 ''', (tuple(ids), ))
58 for x in cr.fetchall():
59 res[x[0]] = x[1]
60 return res
61
62 _columns = {
63 'po_name': fields.char('PO Reference', size=64, required=1, select=1),
64 'requestor_cc_id': fields.many2one('account.analytic.account', 'Requestor Cost Center', required=1, domain="[('category','=', 'OC'), ('type', '!=', 'view')]"),
65 'consignee_cc_id': fields.many2one('account.analytic.account', 'Consignee Cost Center', domain="[('category','=', 'OC'), ('type', '!=', 'view')]"),
66 'imported_consignee_instance': fields.char('Consignee Instance', size=128),
67 'dest_instance_id': fields.function(_get_dest_instance_id, method=1, type='many2one', relation='msf.instance', string='Destination Instance'),
68 'product_id': fields.many2one('product.product', 'Product', required=1, select=1),
69 'price_unit': fields.float('Unit Price', required=1, digits_compute=dp.get_precision('Purchase Price Computation')),
70 'product_qty': fields.float('Quantity', required=True, digits=(16, 2), related_uom='uom_id'),
71 'remaining_qty': fields.float('Remaining Quantity', digits=(16, 2), readonly=1, related_uom='uom_id'),
72 'uom_id': fields.many2one('product.uom', 'UoM'),
73 'currency_id': fields.many2one('res.currency', 'Currency', required=1),
74 'shipment_ref': fields.char('Field mapping with IN', size=128),
75
76 'in_number': fields.function(_get_in_number, type='char', method=True, string='IN Number'),
77 'state': fields.selection([('1_draft', 'Draft'), ('0_open', 'Open'), ('done', 'Done')], 'State', readonly=1),
78
79 }
80
81 _defaults = {
82 'state': '1_draft',
83 }
84
85
86 _sql_constraints = [
87 ('product_qty', 'check(product_qty>0)', 'Quantity must be greater than 0.'),
88 ]
89
90
91 def _update_remaining(self, cr, uid, ids, vals, context=None):
92 if not ids:
93 return
94 if isinstance(ids, (int, long)):
95 ids = [ids]
96 if 'product_qty' in vals and vals.get('state', '1_draft') == '1_draft':
97 cr.execute("update esc_invoice_line set remaining_qty=product_qty where state='1_draft' and id in %s", (tuple(ids), ))
98
99
100 def write(self, cr, uid, ids, vals, context=None):
101 ret = super(esc_invoice_line, self).write(cr, uid, ids, vals, context)
102 self._update_remaining(cr, uid, ids, vals, context)
103 return ret
104
105 def create(self, cr, uid, vals, context=None):
106 new_id = super(esc_invoice_line, self).create(cr, uid, vals, context)
107 self._update_remaining(cr, uid, [new_id], vals, context)
108 return new_id
109
110 def delete_action(self, cr, uid, ids, context=None):
111 if not context:
112 context = {}
113 active_ids = context.get('active_ids')
114 self.delete(cr, uid, active_ids, context=context)
115 return {'type': 'ir.actions.refresh_o2m', 'o2m_refresh': '_terp_list'}
116
117 def delete(self, cr, uid, ids, context=None):
118 to_del_ids = self.search(cr, uid, [('id', 'in', ids), ('state', '=', '1_draft')], context=context)
119 if to_del_ids:
120 self.unlink(cr, uid, to_del_ids, context=context)
121 return True
122
123
124
125esc_invoice_line()
126
127class finance_price_track_changes(osv.osv):
128 _name = 'finance_price.track_changes'
129 _rec_name = 'product_id'
130 _description = 'International Invoices Lines Matching'
131 _order = 'id desc'
132
133 _columns = {
134 'product_id': fields.many2one('product.product', string='Product', required=True, readonly=True, ondelete='cascade', select=1),
135 'old_price': fields.float(string='Previous Finance Price', digits_compute=dp.get_precision('Purchase Price Computation'), required=False, readonly=True),
136 'new_price': fields.float(string='New Finance Price', digits_compute=dp.get_precision('Purchase Price Computation'), required=False, readonly=True),
137 'user_id': fields.many2one('res.users', 'User', readonly=True),
138 'date': fields.datetime('Date', readonly=True),
139 'qty_processed': fields.float('Quantity Processed', readonly=True, digits=(16, 2)),
140 'price_unit': fields.float('Unit Price', required=1, digits_compute=dp.get_precision('Purchase Price Computation'), readonly=True),
141 'stock_before': fields.float('Qty in Stock Before', readonly=True, digits=(16, 2)),
142 'matching_type': fields.selection([('iil', 'International Lines'), ('po', 'PO'), ('invoice', 'Invoice')], 'Matching Type', readonly=True),
143
144 'stock_move_id': fields.many2one('stock.move', 'Move line', readonly=True),
145 'stock_picking_id': fields.related('stock_move_id', 'picking_id', string='IN', type='many2one', relation='stock.picking', readonly=True, domain="[('type', '=', 'in'), ('state', '=', 'done')]"),
146
147 'invoice_id': fields.many2one('account.invoice', 'Invoice', readonly=True),
148 'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True),
149
150 'purchase_oder_line_id': fields.many2one('purchase.order.line', 'PO line', readonly=True),
151
152 'esc_invoice_line_id': fields.many2one('esc.invoice.line', 'International Line', readonly=True),
153 'comment': fields.char('Comment', size=256),
154 }
155
156 _defaults = {
157 'user_id': lambda self, cr, uid, *a, **b: hasattr(uid, 'realUid') and uid.realUid or uid,
158 'date': lambda *a: fields.datetime.now(),
159 }
160
161finance_price_track_changes()
162
163class esc_line_setup(osv.osv_memory):
164 _name = 'esc_line.setup'
165 _inherit = 'res.config'
166
167 _columns = {
168 'esc_line': fields.boolean(string='Activate International Invoices Lines ?'),
169 }
170
171 def default_get(self, cr, uid, fields, context=None, from_web=False):
172 """
173 """
174 if context is None:
175 context = {}
176 setup = self.pool.get('unifield.setup.configuration').get_config(cr, uid)
177 res = super(esc_line_setup, self).default_get(cr, uid, fields, context=context, from_web=from_web)
178 res['esc_line'] = setup.esc_line
179 return res
180
181 def execute(self, cr, uid, ids, context=None):
182 if context is None:
183 context = {}
184 if not isinstance(ids, list) or len(ids) != 1:
185 raise osv.except_osv(_('Error'), _('An error has occurred with the item retrieved from the form. Please contact an administrator if the problem persists.'))
186 wiz = self.browse(cr, uid, ids[0], fields_to_fetch=['esc_line'], context=context)
187 setup_obj = self.pool.get('unifield.setup.configuration')
188 setup = setup_obj.get_config(cr, uid)
189 if setup:
190 for module, xmlid in [('account_hq_entries', 'finance_price_track_changes_menu'), ('account_hq_entries', 'esc_invoice_line_menu'), ('account_hq_entries', 'esc_line_import_menu')]:
191 menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module, xmlid)[1]
192 self.pool.get('ir.ui.menu').write(cr, uid, menu_id, {'active': wiz.esc_line}, context=context)
193 report_fin_price_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_hq_entries', 'report_finance_cost_price')[1]
194 ir_value_id = self.pool.get('ir.values').search(cr, uid, [('key', '=', 'action'), ('key2', '=', 'client_print_multi'), ('model', '=', 'product.product'), ('value', '=', 'ir.actions.report.xml,%d'%report_fin_price_id)], context=context)
195 if ir_value_id:
196 user_id = False
197 if not wiz.esc_line:
198 user_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'user_sync')[1]
199 self.pool.get('ir.values').write(cr, uid, ir_value_id, {'user_id': user_id}, context=context)
200
201 setup_obj.write(cr, uid, [setup.id], {'esc_line': wiz.esc_line}, context=context)
202
203esc_line_setup()
0204
=== added file 'bin/addons/account_hq_entries/esc_line_installer.xml'
--- bin/addons/account_hq_entries/esc_line_installer.xml 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/esc_line_installer.xml 2023-05-05 12:01:38 +0000
@@ -0,0 +1,48 @@
1<openerp>
2 <data>
3 <record id="view_esc_line_setup" model="ir.ui.view">
4 <field name="name">International Invoices Lines</field>
5 <field name="model">esc_line.setup</field>
6 <field name="type">form</field>
7 <field name="inherit_id" ref="base.res_config_view_base"/>
8 <field name="arch" type="xml">
9 <data>
10 <form position="attributes">
11 <attribute name="string">Activate International Invoices Lines</attribute>
12 </form>
13 <xpath expr="//label[@string='description']" position="attributes">
14 <attribute name="string"></attribute>
15 </xpath>
16 <xpath expr='//separator[@string="title"]' position='attributes'>
17 <attribute name='string'>Activate International Invoices Lines</attribute>
18 </xpath>
19 <xpath expr='//separator[@string="vsep"]' position='attributes'>
20 <attribute name='rowspan'>25</attribute>
21 <attribute name='string'></attribute>
22 </xpath>
23 <group string="res_config_contents" position="replace">
24 <group colspan="5">
25 <field name="esc_line" />
26 </group>
27 </group>
28 </data>
29 </field>
30 </record>
31
32 <record id="action_esc_line_setup" model="ir.actions.act_window">
33 <field name="name">Activate International Invoices Lines</field>
34 <field name="type">ir.actions.act_window</field>
35 <field name="res_model">esc_line.setup</field>
36 <field name="view_id" ref="view_esc_line_setup"/>
37 <field name="view_type">form</field>
38 <field name="view_mode">form</field>
39 <field name="target">new</field>
40 </record>
41
42 <record id="esc_line_setup_todo" model="ir.actions.todo">
43 <field name="action_id" ref="action_esc_line_setup"/>
44 <field name="sequence">16</field>
45 <field name="restart">always</field>
46 </record>
47 </data>
48</openerp>
049
=== added file 'bin/addons/account_hq_entries/esc_line_report.xml'
--- bin/addons/account_hq_entries/esc_line_report.xml 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/esc_line_report.xml 2023-05-05 12:01:38 +0000
@@ -0,0 +1,42 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<openerp>
3 <data>
4
5 <report
6 id="report_finance_cost_price"
7 string="Track Changes Finance Price"
8 model="product.product"
9 name="report_finance_cost_price"
10 report_type="openpyxl"
11 header="False"
12 auto="False"
13 menu="True"
14 sequence="110"
15 />
16
17
18 <report
19 id="esc_line_import_template"
20 string="International Invoices Lines Template"
21 model="esc.line.import"
22 name="esc_line_import_template"
23 file="account_hq_entries/report/esc_line_import_template.mako"
24 report_type="webkit"
25 header="False"
26 auto="False"
27 menu="False"
28 />
29
30 <report
31 id="esc_line_import_rejected"
32 string="International Invoices Rejected Lines"
33 model="esc.line.import"
34 name="esc_line_import_rejected"
35 file="account_hq_entries/report/esc_line_import_template.mako"
36 report_type="webkit"
37 header="False"
38 auto="False"
39 menu="False"
40 />
41 </data>
42</openerp>
043
=== modified file 'bin/addons/account_hq_entries/hq_entries.py'
--- bin/addons/account_hq_entries/hq_entries.py 2022-10-13 08:11:44 +0000
+++ bin/addons/account_hq_entries/hq_entries.py 2023-05-05 12:01:38 +0000
@@ -4,7 +4,6 @@
4#4#
5# OpenERP, Open Source Management Solution5# OpenERP, Open Source Management Solution
6# Copyright (C) 2011 TeMPO Consulting, MSF. All Rights Reserved6# Copyright (C) 2011 TeMPO Consulting, MSF. All Rights Reserved
7# Developer: Olivier DOSSMANN
8#7#
9# This program is free software: you can redistribute it and/or modify8# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU Affero General Public License as9# it under the terms of the GNU Affero General Public License as
1110
=== added directory 'bin/addons/account_hq_entries/report'
=== added file 'bin/addons/account_hq_entries/report/__init__.py'
--- bin/addons/account_hq_entries/report/__init__.py 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/report/__init__.py 2023-05-05 12:01:38 +0000
@@ -0,0 +1,2 @@
1import finance_cost_price
2import esc_line_import_report
03
=== added file 'bin/addons/account_hq_entries/report/esc_line_import_report.py'
--- bin/addons/account_hq_entries/report/esc_line_import_report.py 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/report/esc_line_import_report.py 2023-05-05 12:01:38 +0000
@@ -0,0 +1,45 @@
1# -*- coding: utf-8 -*-
2from report import report_sxw
3from spreadsheet_xml.spreadsheet_xml_write import SpreadsheetReport
4from tools.safe_eval import safe_eval
5
6class ErrorLine(report_sxw.rml_parse):
7
8 def __init__(self, cr, uid, name, context):
9 super(ErrorLine, self).__init__(cr, uid, name, context=context)
10 self.localcontext.update({
11 'get_row': self.get_row,
12 'with_error': lambda *a: True,
13 })
14
15 def get_row(self, obj_id):
16 rej_obj = self.pool.get('esc.line.import.rejected')
17
18 limit = 500
19 offset = 0
20 while True:
21 ids = rej_obj.search(self.cr, self.uid, [('wiz_id', '=', obj_id)], offset=offset, limit=limit)
22 offset += limit
23 if not ids:
24 raise StopIteration
25
26 for x in rej_obj.browse(self.cr, self.uid, ids):
27 rows = safe_eval(x.xls_row)
28 yield rows, x.error
29
30 if len(ids) < limit:
31 raise StopIteration
32
33SpreadsheetReport('report.esc_line_import_rejected', 'esc.line.import', 'account_hq_entries/report/esc_line_import_template.mako', parser=ErrorLine)
34
35
36class Template(report_sxw.rml_parse):
37 def __init__(self, cr, uid, name, context):
38 super(Template, self).__init__(cr, uid, name, context=context)
39 self.localcontext.update({
40 'get_row': lambda *a, **b: [],
41 'with_error': lambda *a: False,
42 })
43
44SpreadsheetReport('report.esc_line_import_template', 'esc.line.import', 'account_hq_entries/report/esc_line_import_template.mako', parser=Template)
45
046
=== added file 'bin/addons/account_hq_entries/report/esc_line_import_template.mako'
--- bin/addons/account_hq_entries/report/esc_line_import_template.mako 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/report/esc_line_import_template.mako 2023-05-05 12:01:38 +0000
@@ -0,0 +1,111 @@
1<?xml version="1.0"?>
2<?mso-application progid="Excel.Sheet"?>
3<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
4 xmlns:o="urn:schemas-microsoft-com:office:office"
5 xmlns:x="urn:schemas-microsoft-com:office:excel"
6 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
7 xmlns:html="http://www.w3.org/TR/REC-html40">
8 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
9 <Author>MSFUser</Author>
10 <LastAuthor>Loic MANGERET</LastAuthor>
11 <Created>2012-06-18T15:46:09Z</Created>
12 <LastSaved>2023-03-24T14:45:03Z</LastSaved>
13 <Company>Medecins Sans Frontieres</Company>
14 <Version>16.00</Version>
15 </DocumentProperties>
16 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
17 <AllowPNG/>
18 </OfficeDocumentSettings>
19 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
20 <WindowHeight>7910</WindowHeight>
21 <WindowWidth>19200</WindowWidth>
22 <WindowTopX>32767</WindowTopX>
23 <WindowTopY>32767</WindowTopY>
24 <ProtectStructure>False</ProtectStructure>
25 <ProtectWindows>False</ProtectWindows>
26 </ExcelWorkbook>
27 <Styles>
28 <Style ss:ID="Default" ss:Name="Normal">
29 <Alignment ss:Vertical="Bottom"/>
30 <Borders/>
31 <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
32 <Interior/>
33 <NumberFormat/>
34 <Protection/>
35 </Style>
36 <Style ss:ID="s62">
37 <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
38 <Borders/>
39 <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
40 <Interior/>
41 <NumberFormat/>
42 <Protection ss:Protected="0"/>
43 </Style>
44 <Style ss:ID="s63">
45 <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
46 <Borders/>
47 <Font ss:FontName="Arial" ss:Color="#000000" ss:Bold="1"/>
48 <Interior ss:Color="#FFCC99" ss:Pattern="Solid"/>
49 <NumberFormat/>
50 <Protection/>
51 </Style>
52 </Styles>
53 <Worksheet ss:Name="Sheet 1">
54 <Table x:FullColumns="1"
55 x:FullRows="1" ss:DefaultRowHeight="14.5">
56 <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="149"/>
57 <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="145" ss:Span="1"/>
58 <Column ss:Index="4" ss:StyleID="s62" ss:Width="173" ss:Span="1"/>
59 <Column ss:Index="6" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="216.5"/>
60 <Column ss:StyleID="s62" ss:Width="73"/>
61 <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="120"/>
62 % if with_error():
63 <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="216"/>
64 % endif
65 <Row ss:AutoFitHeight="0" ss:Height="26.5">
66 <Cell ss:StyleID="s63"><Data ss:Type="String">Order Reference</Data></Cell>
67 <Cell ss:StyleID="s63"><Data ss:Type="String">Requestor instance reference/Cost Center</Data></Cell>
68 <Cell ss:StyleID="s63"><Data ss:Type="String">Consignee UF instance/reference</Data></Cell>
69 <Cell ss:StyleID="s63"><Data ss:Type="String">Product Code / Item code</Data></Cell>
70 <Cell ss:StyleID="s63"><Data ss:Type="String">Quantities</Data></Cell>
71 <Cell ss:StyleID="s63"><Data ss:Type="String">Unit Price</Data></Cell>
72 <Cell ss:StyleID="s63"><Data ss:Type="String">Currency</Data></Cell>
73 <Cell ss:StyleID="s63"><Data ss:Type="String">Field mapping with IN</Data></Cell>
74 % if with_error():
75 <Cell ss:StyleID="s63"><Data ss:Type="String">Error</Data></Cell>
76 % endif
77 </Row>
78 % for rows in get_row(objects[0].id):
79 <Row>
80 % for cell in rows[0]:
81 <Cell>
82 % if cell['type'] in ('float', 'int') and cell['data']:
83 <Data ss:Type="Number">${cell['data'] or ''}</Data>
84 % else:
85 <Data ss:Type="String">${cell['data'] or ''}</Data>
86 % endif
87 </Cell>
88 % endfor
89 % for num in range(len(rows[0]), 8):
90 <Cell />
91 % endfor
92 <Cell><Data ss:Type="String">${rows[1]}</Data></Cell>
93 </Row>
94 % endfor
95 </Table>
96 <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
97 <Unsynced/>
98 <Selected/>
99 <Panes>
100 <Pane>
101 <Number>3</Number>
102 <ActiveCol>4</ActiveCol>
103 </Pane>
104 </Panes>
105 <ProtectObjects>False</ProtectObjects>
106 <ProtectScenarios>False</ProtectScenarios>
107 <EnableSelection>UnlockedCells</EnableSelection>
108 <AllowInsertRows/>
109 </WorksheetOptions>
110 </Worksheet>
111</Workbook>
0112
=== added file 'bin/addons/account_hq_entries/report/finance_cost_price.py'
--- bin/addons/account_hq_entries/report/finance_cost_price.py 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/report/finance_cost_price.py 2023-05-05 12:01:38 +0000
@@ -0,0 +1,104 @@
1# -*- coding: utf-8 -*-
2from spreadsheet_xml.xlsx_write import XlsxReport
3from spreadsheet_xml.xlsx_write import XlsxReportParser
4from datetime import datetime
5from tools.translate import _
6
7
8class finance_cost_price(XlsxReportParser):
9
10 def generate(self, context=None):
11 if context is None:
12 context = {}
13
14 sheet = self.workbook.active
15
16 self.create_style_from_template('head_title', 'A1')
17 self.create_style_from_template('head_content', 'C1')
18 self.create_style_from_template('date_content', 'C5')
19
20 self.create_style_from_template('row_title', 'A7')
21
22 date_st = [
23 self.create_style_from_template('date_odd', 'A8'),
24 self.create_style_from_template('date_even', 'A9')
25 ]
26
27 txt_st = [
28 self.create_style_from_template('txt_odd', 'B8'),
29 self.create_style_from_template('txt_even', 'B9')
30 ]
31
32 float_st = [
33 self.create_style_from_template('float_odd', 'G8'),
34 self.create_style_from_template('float_even', 'G9')
35 ]
36
37
38 self.duplicate_column_dimensions(default_width=20.43)
39 sheet.freeze_panes = 'A8'
40
41
42 prod = self.pool.get('product.product').browse(self.cr, self.uid, self.ids[0], fields_to_fetch=['default_code', 'name', 'company_id'], context=context)
43 sheet.title = prod.default_code
44
45 sheet.merged_cells.ranges.append("A1:B1")
46 sheet.merged_cells.ranges.append("C1:F1")
47 sheet.append([self.cell_ro(_('Instance'), 'head_title'), self.cell_ro('', 'head_title'), self.cell_ro(prod.company_id.instance_id.instance, 'head_content')] + [self.cell_ro('', 'head_content')]*3)
48
49 sheet.merged_cells.ranges.append("A2:B2")
50 sheet.merged_cells.ranges.append("C2:F2")
51 sheet.append([self.cell_ro(_('Product code'), 'head_title'), self.cell_ro('', 'head_title'), self.cell_ro(prod.default_code, 'head_content')] + [self.cell_ro('', 'head_content')]*3)
52
53 sheet.merged_cells.ranges.append("A3:B3")
54 sheet.merged_cells.ranges.append("C3:F3")
55 sheet.append([self.cell_ro(_('Product Description'), 'head_title'), self.cell_ro('', 'head_title'), self.cell_ro(prod.name, 'head_content')] + [self.cell_ro('', 'head_content')]*3)
56
57 sheet.merged_cells.ranges.append("A4:B4")
58 sheet.merged_cells.ranges.append("C4:F4")
59 sheet.append([self.cell_ro(_('Currency'), 'head_title'), self.cell_ro('', 'head_title'), self.cell_ro(prod.company_id.currency_id.name, 'head_content')] + [self.cell_ro('', 'head_content')]*3)
60
61 sheet.merged_cells.ranges.append("A5:B5")
62 sheet.merged_cells.ranges.append("C5:F5")
63 sheet.append([self.cell_ro(_('Generation Date'), 'head_title'), self.cell_ro('', 'head_title'), self.cell_ro(datetime.now(), 'date_content')] + [self.cell_ro('', 'head_content')]*3)
64
65 sheet.append([])
66
67 sheet.append([
68 self.cell_ro(_('Date'), 'row_title'),
69 self.cell_ro(_('User'), 'row_title'),
70 self.cell_ro(_('Old Finance Price'), 'row_title'),
71 self.cell_ro(_('New Finance Price'), 'row_title'),
72 self.cell_ro(_('Transaction'), 'row_title'),
73 self.cell_ro(_('Stock Level Before'), 'row_title'),
74 self.cell_ro(_('Qty Processed'), 'row_title'),
75 self.cell_ro(_('Unit Price'), 'row_title'),
76 self.cell_ro(_('Matching Type'), 'row_title'),
77 ])
78
79 matching_obj = self.pool.get('finance_price.track_changes')
80 matching_ids = matching_obj.search(self.cr, self.uid, [('product_id', '=', prod.id)], order='id desc', context=context)
81
82 color = 1
83 previous_in = 0
84 for tc in matching_obj.browse(self.cr, self.uid, matching_ids, context=context):
85 if abs(tc.new_price - tc.old_price) < 0.0001:
86 continue
87
88 if previous_in != tc.stock_move_id.id:
89 previous_in = tc.stock_move_id.id
90 color = 1 - color
91 sheet.append([
92 self.cell_ro(tc.date and datetime.strptime(tc.date, '%Y-%m-%d %H:%M:%S') or '', date_st[color]),
93 self.cell_ro(tc.user_id.name, txt_st[color]),
94 self.cell_ro(round(tc.old_price, 5), float_st[color]),
95 self.cell_ro(round(tc.new_price, 5), float_st[color]),
96 self.cell_ro(tc.stock_picking_id and tc.stock_picking_id.name or tc.invoice_id and tc.invoice_id.name or tc.comment or '', txt_st[color]),
97 self.cell_ro(tc.stock_before, float_st[color]),
98 self.cell_ro(tc.qty_processed, float_st[color]),
99 self.cell_ro(round(tc.price_unit, 5), float_st[color]),
100 self.cell_ro(self.getSel(tc, 'matching_type'), txt_st[color]),
101 ])
102
103XlsxReport('report.report_finance_cost_price', parser=finance_cost_price, template='addons/account_hq_entries/report/finance_cost_price.xlsx')
104
0105
=== added file 'bin/addons/account_hq_entries/report/finance_cost_price.xlsx'
1Binary files bin/addons/account_hq_entries/report/finance_cost_price.xlsx and bin/addons/account_hq_entries/report/finance_cost_price.xlsx differ106Binary files bin/addons/account_hq_entries/report/finance_cost_price.xlsx and bin/addons/account_hq_entries/report/finance_cost_price.xlsx differ
=== modified file 'bin/addons/account_hq_entries/wizard/__init__.py'
--- bin/addons/account_hq_entries/wizard/__init__.py 2013-11-19 10:37:31 +0000
+++ bin/addons/account_hq_entries/wizard/__init__.py 2023-05-05 12:01:38 +0000
@@ -26,4 +26,5 @@
26import hq_entries_validation26import hq_entries_validation
27import hq_entries_split27import hq_entries_split
28import hq_entries_unsplit28import hq_entries_unsplit
29import esc_lines_import
29# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:30# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
3031
=== added file 'bin/addons/account_hq_entries/wizard/esc_lines_import.py'
--- bin/addons/account_hq_entries/wizard/esc_lines_import.py 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/wizard/esc_lines_import.py 2023-05-05 12:01:38 +0000
@@ -0,0 +1,351 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3from osv import osv
4from osv import fields
5from spreadsheet_xml.spreadsheet_xml import SpreadsheetXML
6import threading
7import pooler
8import tools
9from tools.translate import _
10import time
11import base64
12import re
13from psycopg2 import IntegrityError
14
15
16class esc_line_import_rejected(osv.osv):
17 _name = 'esc.line.import.rejected'
18 _description = 'Rejected Lines'
19 _rec_name = 'wiz_id'
20 _order = 'wiz_id desc, id asc'
21
22 _columns = {
23 'wiz_id': fields.many2one('esc.line.import', 'Import', required=1),
24 'error': fields.text('Reason'),
25 'xls_row': fields.text('Row'),
26 }
27
28esc_line_import_rejected()
29
30class esc_line_import_wizard(osv.osv):
31 _name = 'esc.line.import'
32 _description = 'Import International Invoices Lines'
33 _rec_name = 'start_date'
34
35 _columns = {
36 'file': fields.binary(string="File"),
37 'filename': fields.char(string="Imported filename", size=256),
38 'progress': fields.integer(string="Progression", readonly=True),
39 'state': fields.selection([('draft', 'Draft'), ('inprogress', 'In-progress'), ('error', 'Error'), ('done', 'Done'), ('ack', 'ack')],'State', readonly=1),
40 'created': fields.integer('Processed', readonly=1),
41 'total': fields.integer('Total', readonly=1),
42 'nberrors': fields.integer('Errors', readonly=1),
43 'error': fields.text('Error', readonly=1),
44 'start_date': fields.datetime('Start Date', readonly=1),
45 'end_date': fields.datetime('End Date', readonly=1),
46 }
47
48 _defaults = {
49 'state': 'draft',
50 }
51
52 def __init__(self, pool, cr):
53 super(esc_line_import_wizard, self).__init__(pool, cr)
54 if cr.column_exists('esc_line_import_wizard', 'state'):
55 cr.execute("update esc_line_import_wizard set state='error' where state='inprogress'")
56 if cr.column_exists('esc_line_import_wizard', 'file'):
57 cr.execute("update esc_line_import_wizard set file=null where file is not null")
58
59 def write(self, cr, uid, ids, vals, context=None):
60 if context is None:
61 context = {}
62 # remove concurrency warning on refresh
63 if self.CONCURRENCY_CHECK_FIELD in context:
64 del context[self.CONCURRENCY_CHECK_FIELD]
65 return super(esc_line_import_wizard, self).write(cr, uid, ids, vals, context)
66
67 def open_wizard(self, cr, uid, ids, context=None):
68 """
69 on click on menutim: display the running hq import
70 """
71 if self.pool.get('res.company')._get_instance_level(cr, uid) != 'section':
72 raise osv.except_osv(_('Warning'), ('This object can only be imported at HQ level'))
73
74 ids = self.search(cr, uid, [('state', 'in', ['inprogress', 'error', 'done'])], context=context)
75 if ids:
76 res_id = ids[0]
77 view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_hq_entries', 'esc_line_import_progress_wizard')[1]
78 else:
79 res_id = False
80 view_id = False
81 return {
82 'name': _('Import International Invoices Lines'),
83 'type': 'ir.actions.act_window',
84 'res_model': 'esc.line.import',
85 'view_mode': 'form',
86 'view_type': 'form',
87 'view_id': [view_id],
88 'res_id': res_id,
89 'target': 'new',
90 'context': context,
91 }
92
93 def get_template_file(self, cr, uid, ids, context=None):
94 if context is None:
95 context = {}
96
97 return {
98 'type': 'ir.actions.report.xml',
99 'report_name': 'esc_line_import_template',
100 'datas': {'target_filename': _('International Invoices Lines Template'), 'keep_open': 1},
101 'context': context,
102 }
103
104 def get_error_file(self, cr, uid, ids, context=None):
105 if context is None:
106 context = {}
107
108 return {
109 'type': 'ir.actions.report.xml',
110 'report_name': 'esc_line_import_rejected',
111 'datas': {'target_filename': _('International Invoices Rejected Lines'), 'keep_open': 1, 'active_id': ids[0]},
112 'context': context,
113 }
114
115 def button_validate(self, cr, uid, ids, context=None):
116 """
117 Take a CSV file and fetch some informations for HQ Entries
118 """
119 # Do verifications
120 if not context:
121 context = {}
122
123 if isinstance(ids, (int, long)):
124 ids = [ids]
125
126 if not self.browse(cr, uid, ids[0], context=context).file:
127 raise osv.except_osv(_('Warning'), _('No file to import'))
128
129 threading.Thread(target=self.load_bg, args=(cr.dbname, uid, ids[0], context)).start()
130 self.write(cr, uid, ids[0], {'state': 'inprogress', 'progress': 0}, context=context)
131
132 view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_hq_entries', 'esc_line_import_progress_wizard')[1]
133 return {
134 'name': _('Import International Invoices Lines'),
135 'type': 'ir.actions.act_window',
136 'res_model': 'esc.line.import',
137 'view_mode': 'form',
138 'view_type': 'form',
139 'view_id': [view_id],
140 'res_id': ids[0],
141 'target': 'new',
142 'context': context,
143 }
144
145
146 def load_bg(self, dbname, uid, wiz_id, context=None):
147 def manage_error(line_index, msg, row):
148 errors.append(_('Line %s, %s') % (line_index, _(msg)))
149 line_data = []
150 len_cell = len(row.cells)
151 for x in range(0, min(len_cell, 8)):
152 line_data.append({'type': row.cells[x].type, 'data': row.cells[x].data})
153 self.pool.get('esc.line.import.rejected').create(cr, uid, {'wiz_id': wiz_id, 'error': msg, 'xls_row': tools.ustr(line_data)}, context=context)
154
155 errors = []
156 curr_cache = {}
157 product_cache = {}
158 cost_center = {}
159
160 created = 0
161 processed = 0
162
163 created_ids = {}
164 consignee_instances = {}
165 try:
166 cr = pooler.get_db(dbname).cursor()
167
168 target_cc_ids = self.pool.get('account.target.costcenter').search(cr, uid, [('instance_id.state', '!=', 'inactive'), ('is_po_fo_cost_center', '=', True)], context=context)
169 for target in self.pool.get('account.target.costcenter').browse(cr, uid, target_cc_ids, fields_to_fetch=['cost_center_id', 'instance_id'], context=context):
170 cost_center[target.cost_center_id.code.lower()] = target.cost_center_id.id
171 consignee_instances[target.instance_id.instance.lower()] = target.cost_center_id.id
172
173 wiz = self.browse(cr, uid, wiz_id, context=None)
174 file_data = SpreadsheetXML(xmlstring=base64.decodestring(wiz.file))
175 nb_lines = file_data.getRows()
176
177 line = 0
178 for row in file_data.getRows():
179 line += 1
180 if line == 1:
181 # header
182 continue
183 if not len(row.cells):
184 # empty line
185 continue
186 processed += 1
187 if len(row.cells) < 7:
188 manage_error(line, _('a row must have 8 columns'), row)
189 continue
190
191 if not row.cells[0].data:
192 manage_error(line, _('Order ref is mandatory'), row)
193 continue
194
195 po_ref = row.cells[0].data.strip()
196 if not re.match('^[0-9]{2}/[^/]+/\w+/PO\d+$', po_ref):
197 manage_error(line, _('Order ref %s does not match the PO pattern') % po_ref, row)
198 continue
199
200 if not row.cells[1].data:
201 manage_error(line, _('Requestor Cost Center is mandatory'), row)
202 continue
203
204 cc = row.cells[1].data.strip().lower()
205 if cc not in cost_center:
206 manage_error(line, _('Requestor Cost Center %s not found or does not match any active instance.') % row.cells[1].data, row)
207 continue
208 cc_id = cost_center[cc]
209
210 consignee_id = False
211 consignee_instance_txt = False
212 if row.cells[2].data:
213 cc = row.cells[2].data.strip().lower()
214
215 if cc in cost_center:
216 consignee_id = cost_center[cc]
217 consignee_instance_txt = ''
218 elif cc in consignee_instances:
219 consignee_id= consignee_instances[cc]
220 consignee_instance_txt = row.cells[2].data.strip()
221 else:
222 manage_error(line, _('Consignee Cost Center/Instance %s not found or does not match any active instance.') % row.cells[2].data, row)
223 continue
224
225
226 if not row.cells[3].data:
227 manage_error(line, _('Product Code is mandatory.'), row)
228 continue
229 p_code = row.cells[3].data.strip().lower()
230 if p_code not in product_cache:
231 p_ids = self.pool.get('product.product').search(cr, uid, [('default_code', '=ilike', p_code)], context=context)
232 product_cache[p_code] = p_ids[0] if p_ids else False
233 if not product_cache[p_code]:
234 manage_error(line, _('Product Code %s not found.') % (row.cells[3].data,), row)
235 continue
236
237 if not row.cells[4].data:
238 manage_error(line, _('Product quantity is mandatory.'), row)
239 continue
240 try:
241 qty = float(row.cells[4].data)
242 except:
243 manage_error(line, _('Product Quantity %s is not a number.') % (row.cells[4].data, ), row)
244 continue
245
246 if qty <= 0:
247 manage_error(line, _('Product Quantity %s cannot be 0 or negative') % (row.cells[4].data, ), row)
248 continue
249
250 if not row.cells[5].data:
251 manage_error(line, _('Unit Price is mandatory.'), row)
252 continue
253 try:
254 unit_price = float(row.cells[5].data)
255 except:
256 manage_error(line, _('Unit Price %s is not a number.') % (row.cells[5].data, ), row)
257 continue
258
259 if not row.cells[6].data:
260 manage_error(line, _('Currency is mandatory.'), row)
261 continue
262 curr_code = row.cells[6].data.strip().lower()
263 if curr_code not in curr_cache:
264 curr_ids = self.pool.get('res.currency').search(cr, uid, [('name', '=ilike', curr_code)], context=context)
265 curr_cache[curr_code] = curr_ids[0] if curr_ids else False
266 if not curr_cache[curr_code]:
267 manage_error(line, _('Currency %s not found.') % (row.cells[6].data,), row)
268 continue
269
270 mapping = ''
271 if len(row.cells) > 7 and row.cells[7].data:
272 mapping = row.cells[7].data.strip()
273
274 cr.execute("SAVEPOINT esc_line")
275 try:
276 new_line = self.pool.get('esc.invoice.line').create(cr, uid, {
277 'po_name': po_ref,
278 'requestor_cc_id': cc_id,
279 'consignee_cc_id': consignee_id,
280 'imported_consignee_instance': consignee_instance_txt,
281 'product_id': product_cache[p_code],
282 'price_unit': unit_price,
283 'product_qty': qty,
284 'currency_id': curr_cache[curr_code],
285 'shipment_ref': mapping,
286 }, context=context)
287 created_ids[new_line] = line
288 created += 1
289 cr.execute("RELEASE SAVEPOINT esc_line")
290 except osv.except_osv, e:
291 cr.execute("ROLLBACK TO SAVEPOINT esc_line")
292 manage_error(line, e.value, row)
293 except IntegrityError:
294 cr.execute("ROLLBACK TO SAVEPOINT esc_line")
295 line_id = False
296
297 if created_ids:
298 line_id = self.pool.get('esc.invoice.line').search(cr, uid, [
299 ('id', 'in', created_ids.keys()),
300 ('po_name', '=', po_ref),
301 ('requestor_cc_id', '=', cc_id),
302 ('consignee_cc_id', '=', consignee_id),
303 ('product_id', '=', product_cache[p_code]),
304 ('price_unit', '=', unit_price),
305 ('product_qty', '=', qty),
306 ('currency_id', '=', curr_cache[curr_code]),
307 ('shipment_ref', '=', mapping)
308 ], context=context)
309 if line_id:
310 manage_error(line, _('duplicates line %d') % created_ids[line_id[0]], row)
311 if not line_id:
312 manage_error(line, _('Line duplicated in the system'), row)
313
314 if processed%10 == 0:
315 self.write(cr, uid, wiz_id, {'progress': int(processed/float(nb_lines)*100), 'created': created, 'nberrors': len(errors), 'error': "\n".join(errors)}, context=context)
316
317 state = 'done'
318 if errors:
319 state = 'error'
320 nb_errors = len(errors)
321 errors.insert(0, _('Imported with error(s)'))
322 msg = "\n".join(errors)
323 else:
324 msg = _("International Invoices Lines import successful")
325 nb_errors = 0
326
327 self.write(cr, uid, wiz_id, {'progress': 100, 'state': state, 'created': created, 'total': processed, 'error': msg, 'nberrors': nb_errors, 'end_date': time.strftime('%Y-%m-%d %H:%M:%S'), 'file': False}, context=context)
328
329 except Exception, e:
330 cr.rollback()
331 if isinstance(e, osv.except_osv):
332 error = e.value
333 else:
334 error = e
335 msg = self.read(cr, uid, wiz_id, ['error'])['error'] or ''
336 self.write(cr, uid, wiz_id, {'state': 'error', 'progress': 100, 'error': "%s\n%s\n%s" % (msg, tools.ustr(error), tools.get_traceback(e)), 'end_date': time.strftime('%Y-%m-%d %H:%M:%S')})
337 finally:
338 cr.commit()
339 cr.close(True)
340
341 def done(self, cr, uid, ids, context=None):
342 self.write(cr, uid, ids, {'state': 'ack'}, context=context)
343 d = self.pool.get('ir.actions.act_window').open_view_from_xmlid(cr, uid, 'account_hq_entries.esc_invoice_line_action', context=context)
344 return d
345
346 def ack(self, cr, uid, ids, context=None):
347 self.write(cr, uid, ids, {'state': 'ack'}, context=context)
348 return {'type': 'ir.actions.act_window_close'}
349
350esc_line_import_wizard()
351
0352
=== added file 'bin/addons/account_hq_entries/wizard/esc_lines_import_view.xml'
--- bin/addons/account_hq_entries/wizard/esc_lines_import_view.xml 1970-01-01 00:00:00 +0000
+++ bin/addons/account_hq_entries/wizard/esc_lines_import_view.xml 2023-05-05 12:01:38 +0000
@@ -0,0 +1,89 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <record id="esc_line_import_wizard" model="ir.ui.view">
6 <field name="name">esc.line.import.wizard</field>
7 <field name="model">esc.line.import</field>
8 <field name="type">form</field>
9 <field name="arch" type="xml">
10 <form string="International Invoices Lines Import">
11 <label string="This will import lines from a SpreadSheet xml file." colspan="4"/>
12 <newline/>
13 <group colspan="4">
14 <field name="file" filename="filename" colspan="2"/>
15 <field name="filename" invisible="1"/>
16 </group>
17 <newline />
18 <button name="get_template_file" type="object" string="Download Empty Template" icon="gtk-justify-fill" colspan="1"/>
19 <group colspan="3" />
20 <newline />
21 <newline />
22 <group colspan="4" col="2">
23 <button string="Cancel" special="cancel" icon="gtk-cancel"/>
24 <button name="button_validate" type="object" string="Import" icon="terp-camera_test"/>
25 </group>
26 </form>
27 </field>
28 </record>
29
30
31 <record id="esc_line_import_progress_wizard" model="ir.ui.view">
32 <field name="name">esc.line.import.wizard</field>
33 <field name="model">esc.line.import</field>
34 <field name="priority" eval="100" />
35 <field name="type">form</field>
36 <field name="arch" type="xml">
37 <form string="International Invoices Lines Import">
38 <field name="progress" widget="progressbar" colspan="4"/>
39 <newline />
40 <field name="filename" readonly="1" />
41 <newline />
42 <field name="state" />
43 <group colspan="2" col="4">
44 <field name="start_date" />
45 <field name="end_date" />
46 </group>
47 <html colspan="4">
48 <script language="javascript">
49 $(document).ready(function() {
50 if ($('#state').val() == 'inprogress') {
51 setTimeout(function(){
52 $('#dummy').click();
53 },2400)
54 }
55 });
56 </script>
57 </html>
58
59 <newline />
60 <field name="created" />
61 <field name="nberrors" />
62 <newline />
63 <group colspan="4" col="4">
64 <button name="get_error_file" type="object" string="Download Rejected Lines" icon="gtk-justify-fill" colspan="1" attrs="{'invisible': [('state', '!=', 'error')]}"/>
65 <group colspan="3" />
66 </group>
67 <newline />
68 <newline />
69 <field name="error" colspan="4" nolabel="1" />
70 <group colspan="4" col="4">
71 <button name="dummy" string="Update" icon="gtk-refresh" invisible="1"/>
72 <button string="OK" name="done" type="object" icon="gtk-ok" states="done" />
73 <button string="Reset" name="done" type="object" icon="gtk-ok" states="error" help="Reset import and close the window" />
74 <button string="Close" special="cancel" icon="gtk-cancel" states="error" help="Keep import results and close the window"/>
75 </group>
76 </form>
77 </field>
78 </record>
79
80 <record id="esc_line_import_action" model="ir.actions.server">
81 <field name="name">International Invoices Lines Import</field>
82 <field name="model_id" ref="model_esc_line_import" />
83 <field name="state">code</field>
84 <field name="code">action = obj.open_wizard(context=context)</field>
85 </record>
86
87 <menuitem name="International Invoices Lines Import" action="esc_line_import_action" type="server" id="esc_line_import_menu" parent="menu_hq" sequence="19"/>
88 </data>
89</openerp>
090
=== modified file 'bin/addons/delivery_mechanism/delivery_mechanism.py'
--- bin/addons/delivery_mechanism/delivery_mechanism.py 2022-05-10 12:24:07 +0000
+++ bin/addons/delivery_mechanism/delivery_mechanism.py 2023-05-05 12:01:38 +0000
@@ -467,25 +467,79 @@
467 uom_obj = self.pool.get('product.uom')467 uom_obj = self.pool.get('product.uom')
468 currency_obj = self.pool.get('res.currency')468 currency_obj = self.pool.get('res.currency')
469 product_obj = self.pool.get('product.product')469 product_obj = self.pool.get('product.product')
470 esc_line_obj = self.pool.get('esc.invoice.line')
471 tc_fin_obj = self.pool.get('finance_price.track_changes')
470472
471 if context is None:473 if context is None:
472 context = {}474 context = {}
473475
474 average_values = {}476 average_values = {}
475477
478 company_currency_id = move.company_id.currency_id.id
479
476 if move.price_currency_id:480 if move.price_currency_id:
477 move_currency_id = move.price_currency_id.id481 move_currency_id = move.price_currency_id.id
478 else:482 else:
479 move_currency_id = move.company_id.currency_id.id483 move_currency_id = move.company_id.currency_id.id
480 context['currency_id'] = move_currency_id484 context['currency_id'] = move_currency_id
481485
486
487
488 compute_finance_price = False
489 if self.pool.get('unifield.setup.configuration').get_config(cr, uid, 'esc_line'):
490 compute_finance_price = move.picking_id.partner_id.partner_type == 'esc' or move.dpo_line_id and move.purchase_line_id.from_dpo_esc or False
491
482 qty = line.quantity492 qty = line.quantity
483 if line.uom_id.id != line.product_id.uom_id.id:493 if line.uom_id.id != line.product_id.uom_id.id:
484 qty = uom_obj._compute_qty(cr, uid, line.uom_id.id, line.quantity, line.product_id.uom_id.id)494 qty = uom_obj._compute_qty(cr, uid, line.uom_id.id, line.quantity, line.product_id.uom_id.id)
485495
486 product_availability.setdefault(line.product_id.id, line.product_id.qty_available)496 product_availability.setdefault(line.product_id.id, line.product_id.qty_available)
487497 track_finance_price = []
498 tc_fin_ids = []
488 if qty > 0.00:499 if qty > 0.00:
500 if compute_finance_price:
501 esc_dom = [('state','!=', 'done'), ('product_id', '=', line.product_id.id), ('po_name', '=', move.purchase_line_id.order_id.name)]
502 # exact qty
503 esc_ids = esc_line_obj.search(cr, uid, esc_dom + [('remaining_qty', '=', qty)], order='state, id', limit=1, context=context)
504 if not esc_ids:
505 esc_ids = esc_line_obj.search(cr, uid, esc_dom, order='state, id', context=context)
506
507 remaining_in_qty = qty
508 total_price = 0
509 for esc_line in esc_line_obj.browse(cr, uid, esc_ids, context=context):
510 if remaining_in_qty <= 0:
511 break
512 unit_iil_price = esc_line.price_unit
513 if esc_line.currency_id.id != company_currency_id:
514 unit_iil_price = currency_obj.compute(cr, uid, esc_line.currency_id.id, company_currency_id, unit_iil_price, round=False, context=context)
515
516 if esc_line.remaining_qty - remaining_in_qty >= 0.001:
517 total_price += unit_iil_price * remaining_in_qty
518
519 remaining_iil_qty = esc_line.remaining_qty - remaining_in_qty
520 if abs(remaining_iil_qty) <= 0.001:
521 esc_line_obj.write(cr, uid, esc_line.id, {'state': 'done', 'remaining_qty': 0}, context=context)
522 else:
523 esc_line_obj.write(cr, uid, esc_line.id, {'state': '0_open', 'remaining_qty': remaining_iil_qty}, context=context)
524 track_finance_price.append({'qty_processed': remaining_in_qty, 'price_unit': unit_iil_price, 'matching_type': 'iil', 'esc_invoice_line_id': esc_line.id})
525 remaining_in_qty = 0
526
527 else:
528 esc_line_obj.write(cr, uid, esc_line.id, {'state': 'done', 'remaining_qty': 0}, context=context)
529 total_price += unit_iil_price * esc_line.remaining_qty
530 remaining_in_qty -= esc_line.remaining_qty
531 track_finance_price.append({'qty_processed': esc_line.remaining_qty, 'price_unit': unit_iil_price, 'matching_type': 'iil', 'esc_invoice_line_id': esc_line.id})
532
533 if remaining_in_qty > 0:
534 # all IIL used: take PO price
535 po_price = move.purchase_line_id.price_unit
536 if move.purchase_line_id.order_id.currency_id.id != company_currency_id:
537 po_price = currency_obj.compute(cr, uid, move.purchase_line_id.order_id.currency_id.id, company_currency_id, po_price, round=False, context=context)
538 total_price += remaining_in_qty * po_price
539 track_finance_price.append({'qty_processed': remaining_in_qty, 'price_unit': po_price, 'matching_type': 'po', 'purchase_oder_line_id': move.purchase_line_id.id})
540
541
542 # by remaining qty
489 new_price = line.cost543 new_price = line.cost
490 # Recompute unit price if the currency used is not the functional currency544 # Recompute unit price if the currency used is not the functional currency
491 if line.currency.id != move_currency_id:545 if line.currency.id != move_currency_id:
@@ -500,19 +554,36 @@
500 new_std_price = 0.00554 new_std_price = 0.00
501 if line.product_id.qty_available <= 0.00:555 if line.product_id.qty_available <= 0.00:
502 new_std_price = new_price556 new_std_price = new_price
557 if compute_finance_price:
558 new_finance_price = round(total_price / float(qty), 5)
503 else:559 else:
504 # Get the current price in today's rate560 # Get the current price in today's rate
505 current_price = product_obj.price_get(cr, uid, [line.product_id.id], 'standard_price', context=context)[line.product_id.id]561 current_price = product_obj.price_get(cr, uid, [line.product_id.id], 'standard_price', context=context)[line.product_id.id]
562
506 # Check no division by zero563 # Check no division by zero
507 if product_availability[line.product_id.id]:564 if product_availability[line.product_id.id]:
508 new_std_price = ((current_price * product_availability[line.product_id.id])565 new_std_price = ((current_price * product_availability[line.product_id.id])
509 + (new_price * qty)) / (product_availability[line.product_id.id] + qty)566 + (new_price * qty)) / (product_availability[line.product_id.id] + qty)
510567
568 if compute_finance_price:
569 # TODO : init finance_price
570 if not line.product_id.finance_price:
571 new_finance_price = round(total_price / float(qty), 5)
572 else:
573 new_finance_price = round((line.product_id.finance_price * product_availability[line.product_id.id] + total_price) / (product_availability[line.product_id.id] + qty), 5)
574
511 new_std_price = round(currency_obj.compute(cr, uid, line.currency.id, move.company_id.currency_id.id,575 new_std_price = round(currency_obj.compute(cr, uid, line.currency.id, move.company_id.currency_id.id,
512 new_std_price, round=False, context=context), 5)576 new_std_price, round=False, context=context), 5)
513577
514 # Write the field according to price type field578 # Write the field according to price type field
515 product_obj.write(cr, uid, [line.product_id.id], {'standard_price': new_std_price})579 prod_to_write = {'standard_price': new_std_price}
580 if compute_finance_price:
581 prod_to_write['finance_price'] = new_finance_price
582 for tc_fin in track_finance_price:
583 tc_fin.update({'product_id': line.product_id.id, 'old_price': line.product_id.finance_price, 'new_price': new_finance_price, 'stock_before': product_availability.get(line.product_id.id, 0)})
584 tc_fin_ids.append(tc_fin_obj.create(cr, uid, tc_fin, context=context))
585 product_obj.write(cr, uid, [line.product_id.id], prod_to_write)
586
516 pchanged = False587 pchanged = False
517 # Is price changed ?588 # Is price changed ?
518 if line.cost and move.purchase_line_id:589 if line.cost and move.purchase_line_id:
@@ -531,7 +602,7 @@
531 'price_currency_id': line.currency.id,602 'price_currency_id': line.currency.id,
532 }603 }
533604
534 return average_values, sptc_values605 return average_values, sptc_values, tc_fin_ids
535606
536 def _get_values_from_line(self, cr, uid, move, line, db_data, context=None):607 def _get_values_from_line(self, cr, uid, move, line, db_data, context=None):
537 """608 """
@@ -814,7 +885,6 @@
814 out_moves = mirror_data['moves']885 out_moves = mirror_data['moves']
815 average_values = {}886 average_values = {}
816 move_sptc_values = []887 move_sptc_values = []
817
818 line = False888 line = False
819889
820 if move.purchase_line_id and move.purchase_line_id.id not in po_line_qty:890 if move.purchase_line_id and move.purchase_line_id.id not in po_line_qty:
@@ -828,11 +898,13 @@
828898
829 if not values.get('product_qty', 0.00):899 if not values.get('product_qty', 0.00):
830 continue900 continue
901
902 tc_ids = []
831 # Check if we must re-compute the price of the product903 # Check if we must re-compute the price of the product
832 compute_average = process_avg_sysint and picking_dict['type'] == 'in' and line.product_id.cost_method == 'average'904 compute_average = process_avg_sysint and picking_dict['type'] == 'in' and line.product_id.cost_method == 'average'
833905
834 if compute_average:906 if compute_average:
835 average_values, sptc_values = self._compute_average_values(cr, uid, move, line, product_availability, context=context)907 average_values, sptc_values, tc_ids = self._compute_average_values(cr, uid, move, line, product_availability, context=context)
836 values.update(average_values)908 values.update(average_values)
837 move_sptc_values.append(sptc_values)909 move_sptc_values.append(sptc_values)
838910
@@ -856,6 +928,9 @@
856 context['keepLineNumber'] = False928 context['keepLineNumber'] = False
857 done_moves.append(new_move_id)929 done_moves.append(new_move_id)
858930
931 if tc_ids:
932 self.pool.get('finance_price.track_changes').write(cr, uid, tc_ids, {'stock_move_id': done_moves[-1]}, context=context)
933
859 values['processed_stock_move'] = False934 values['processed_stock_move'] = False
860935
861 out_values = values.copy()936 out_values = values.copy()
862937
=== modified file 'bin/addons/msf_audittrail/data/audittrail_hq_entry.yml'
--- bin/addons/msf_audittrail/data/audittrail_hq_entry.yml 2021-05-05 16:04:38 +0000
+++ bin/addons/msf_audittrail/data/audittrail_hq_entry.yml 2023-05-05 12:01:38 +0000
@@ -26,3 +26,31 @@
26 self.write(cr, uid, rule_id, vals, context=context)26 self.write(cr, uid, rule_id, vals, context=context)
27 # Subscribe to the rule27 # Subscribe to the rule
28 self.subscribe(cr, uid, rule_id)28 self.subscribe(cr, uid, rule_id)
29
30-
31 For International Invoice Lines
32-
33 !python {model: audittrail.rule}: |
34 name = 'International Invoice Lines'
35 object_ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', 'esc.invoice.line')], context=context)
36 rule_id = self.search(cr, uid, [('object_id', 'in', object_ids)], context=context)
37 if object_ids:
38 # Create the rule
39 fields = ['state']
40 fields_ids = self.pool.get('ir.model.fields').search(cr, uid, [('model', '=', 'esc.invoice.line'), ('name', 'in', fields)], context=context)
41
42 vals = {
43 'name': name,
44 'object_id': object_ids[0],
45 'log_write': True,
46 'log_unlink': True,
47 'log_create': True,
48 'field_ids': [(6, 0, fields_ids)],
49 }
50
51 if not rule_id:
52 rule_id = self.create(cr, uid, vals, context=context)
53 elif rule_id:
54 self.write(cr, uid, rule_id, vals, context=context)
55 # Subscribe to the rule
56 self.subscribe(cr, uid, rule_id)
2957
=== modified file 'bin/addons/msf_printed_documents/printed_report.xml'
--- bin/addons/msf_printed_documents/printed_report.xml 2020-09-18 14:39:47 +0000
+++ bin/addons/msf_printed_documents/printed_report.xml 2023-05-05 12:01:38 +0000
@@ -30,6 +30,7 @@
30 header="False"30 header="False"
31 auto="False"31 auto="False"
32 menu="True"32 menu="True"
33 sequence="150"
33 />34 />
3435
35 <report36 <report
3637
=== modified file 'bin/addons/msf_profile/data/patches.xml'
--- bin/addons/msf_profile/data/patches.xml 2023-05-03 10:23:38 +0000
+++ bin/addons/msf_profile/data/patches.xml 2023-05-05 12:01:38 +0000
@@ -901,6 +901,7 @@
901 <record id="us_11195_oca_period_nr" model="patch.scripts">901 <record id="us_11195_oca_period_nr" model="patch.scripts">
902 <field name="method">us_11195_oca_period_nr</field>902 <field name="method">us_11195_oca_period_nr</field>
903 </record>903 </record>
904<<<<<<< TREE
904905
905 <!-- UF29.0 -->906 <!-- UF29.0 -->
906 <record id="us_11177_bn_for_kcl_items" model="patch.scripts">907 <record id="us_11177_bn_for_kcl_items" model="patch.scripts">
@@ -933,5 +934,11 @@
933 <record id="us_10885_tc_entries" model="patch.scripts">934 <record id="us_10885_tc_entries" model="patch.scripts">
934 <field name="method">us_10885_tc_entries</field>935 <field name="method">us_10885_tc_entries</field>
935 </record>936 </record>
937=======
938
939 <record id="us_10835_disable_iil_menu" model="patch.scripts">
940 <field name="method">us_10835_disable_iil_menu</field>
941 </record>
942>>>>>>> MERGE-SOURCE
936 </data>943 </data>
937</openerp>944</openerp>
938945
=== modified file 'bin/addons/msf_profile/i18n/fr_MF.po'
--- bin/addons/msf_profile/i18n/fr_MF.po 2023-05-04 12:17:53 +0000
+++ bin/addons/msf_profile/i18n/fr_MF.po 2023-05-05 12:01:38 +0000
@@ -305,7 +305,7 @@
305msgid "Instance code / Place of payment"305msgid "Instance code / Place of payment"
306msgstr "Code de l'Instance / Lieu du paiement"306msgstr "Code de l'Instance / Lieu du paiement"
307307
308#. modules: account, register_accounting, account_mcdb, sale, base,useability_dashboard_and_menu308#. modules: account, register_accounting, account_mcdb, sale, base,useability_dashboard_and_menu, account_hq_entries
309#: selection:account.period,state:0309#: selection:account.period,state:0
310#: selection:account.fiscalyear.state,state:0310#: selection:account.fiscalyear.state,state:0
311#: selection:account.period.state,state:0311#: selection:account.period.state,state:0
@@ -314,7 +314,11 @@
314#: view:signature.follow_up:0314#: view:signature.follow_up:0
315#: selection:signature.follow_up,doc_state:0315#: selection:signature.follow_up,doc_state:0
316#: selection:signature.follow_up,status:0316#: selection:signature.follow_up,status:0
317<<<<<<< TREE
317#: code:addons/useability_dashboard_and_menu/report/signature_follow_up_search_report.py:74318#: code:addons/useability_dashboard_and_menu/report/signature_follow_up_search_report.py:74
319=======
320#: selection:esc.invoice.line,state:0
321>>>>>>> MERGE-SOURCE
318msgid "Open"322msgid "Open"
319msgstr "Ouverte"323msgstr "Ouverte"
320324
@@ -8314,7 +8318,7 @@
8314msgid "Generate discrepancies"8318msgid "Generate discrepancies"
8315msgstr "Générer les écarts"8319msgstr "Générer les écarts"
83168320
8317#. modules: purchase, account, msf_outgoing, finance, purchase_override, procurement, procurement_request, tender_flow, product, specific_rules, kit, stock_forecast, analytic, stock_batch_recall, register_accounting, stock_override, msf_supply_doc_export, mission_stock, msf_doc_import, sale, stock, account_override8321#. modules: purchase, account, msf_outgoing, finance, purchase_override, procurement, procurement_request, tender_flow, product, specific_rules, kit, stock_forecast, analytic, stock_batch_recall, register_accounting, stock_override, msf_supply_doc_export, mission_stock, msf_doc_import, sale, stock, account_override, account_hq_entries
8318#: report:account.analytic.account.balance:08322#: report:account.analytic.account.balance:0
8319#: report:account.analytic.account.inverted.balance:08323#: report:account.analytic.account.inverted.balance:0
8320#: report:account.analytic.account.quantity_cost_ledger:08324#: report:account.analytic.account.quantity_cost_ledger:0
@@ -8412,10 +8416,14 @@
8412#: field:view.expired.expiring.stock.lines,product_qty:08416#: field:view.expired.expiring.stock.lines,product_qty:0
8413#: code:addons/msf_doc_import/report/return_from_unit_export.py:1208417#: code:addons/msf_doc_import/report/return_from_unit_export.py:120
8414#: field:account.analytic.line,entry_quantity:08418#: field:account.analytic.line,entry_quantity:0
8419<<<<<<< TREE
8415#: report:loan.certificate:08420#: report:loan.certificate:0
8416#: report:loan.return.certificate:08421#: report:loan.return.certificate:0
8417#: report:ship.loan.certificate:08422#: report:ship.loan.certificate:0
8418#: report:ship.loan.return.certificate:08423#: report:ship.loan.return.certificate:0
8424=======
8425#: field:esc.invoice.line,product_qty:0
8426>>>>>>> MERGE-SOURCE
8419#, python-format8427#, python-format
8420msgid "Quantity"8428msgid "Quantity"
8421msgstr "Quantité"8429msgstr "Quantité"
@@ -8702,6 +8710,8 @@
8702#: selection:signature.follow_up,doc_state:08710#: selection:signature.follow_up,doc_state:0
8703#: selection:hq.entries.import,state:08711#: selection:hq.entries.import,state:0
8704#: view:physical.inventory:08712#: view:physical.inventory:0
8713#: selection:esc.invoice.line,state:0
8714#: selection:esc.line.import,state:0
8705#, python-format8715#, python-format
8706msgid "Draft"8716msgid "Draft"
8707msgstr "Brouillon"8717msgstr "Brouillon"
@@ -8784,6 +8794,7 @@
8784#: field:wizard.register.import,filename:08794#: field:wizard.register.import,filename:0
8785#: field:account.invoice.import,filename:08795#: field:account.invoice.import,filename:0
8786#: field:account.cv.import,filename:08796#: field:account.cv.import,filename:0
8797#: field:esc.line.import,filename:0
8787msgid "Imported filename"8798msgid "Imported filename"
8788msgstr "Nom du fichier importé"8799msgstr "Nom du fichier importé"
87898800
@@ -9632,7 +9643,7 @@
9632msgid "Go to tender form"9643msgid "Go to tender form"
9633msgstr "Aller sur Formulaire Appels d'Offres"9644msgstr "Aller sur Formulaire Appels d'Offres"
96349645
9635#. modules: account, base_setup, purchase_double_validation, msf_instance, sale, msf_config_locations, base, msf_button_access_rights, unifield_setup9646#. modules: account, base_setup, purchase_double_validation, msf_instance, sale, msf_config_locations, base, msf_button_access_rights, unifield_setup, account_hq_entries
9636#: view:wizard.multi.charts.accounts:09647#: view:wizard.multi.charts.accounts:0
9637#: view:res.config:09648#: view:res.config:0
9638#: view:res.config.users:09649#: view:res.config.users:0
@@ -9657,6 +9668,7 @@
9657#: view:customer.commitment.setup:09668#: view:customer.commitment.setup:0
9658#: view:previous.fy.dates.setup:09669#: view:previous.fy.dates.setup:0
9659#: view:signature.setup:09670#: view:signature.setup:0
9671#: view:esc_line.setup:0
9660msgid "res_config_contents"9672msgid "res_config_contents"
9661msgstr "res_config_contents"9673msgstr "res_config_contents"
96629674
@@ -16305,6 +16317,7 @@
16305#: view:sync.version.instance.monitor:016317#: view:sync.version.instance.monitor:0
16306#: view:automated.export:016318#: view:automated.export:0
16307#: view:automated.import:016319#: view:automated.import:0
16320#: view:esc.invoice.line:0
16308msgid "Group By..."16321msgid "Group By..."
16309msgstr "Grouper Par..."16322msgstr "Grouper Par..."
1631016323
@@ -20083,6 +20096,7 @@
20083#: field:account.invoice.import,progression:020096#: field:account.invoice.import,progression:0
20084#: field:hq.entries.import,progress:020097#: field:hq.entries.import,progress:0
20085#: field:account.cv.import,progression:020098#: field:account.cv.import,progression:0
20099#: field:esc.line.import,progress:0
20086msgid "Progression"20100msgid "Progression"
20087msgstr "Progression"20101msgstr "Progression"
2008820102
@@ -20948,6 +20962,9 @@
20948#: selection:wizard.import.ad.line,state:020962#: selection:wizard.import.ad.line,state:0
20949#: selection:hq.entries.import,state:020963#: selection:hq.entries.import,state:0
20950#: selection:account.cv.import,state:020964#: selection:account.cv.import,state:0
20965#: view:esc.invoice.line:0
20966#: selection:esc.invoice.line,state:0
20967#: selection:esc.line.import,state:0
20951msgid "Done"20968msgid "Done"
20952msgstr "Clôturé"20969msgstr "Clôturé"
2095320970
@@ -23178,6 +23195,7 @@
23178#: view:replenishment.segment.line:023195#: view:replenishment.segment.line:0
23179#: view:replenishment.consolidated_oc.import:023196#: view:replenishment.consolidated_oc.import:0
23180#: view:hq.entries.import:023197#: view:hq.entries.import:0
23198#: view:esc.line.import:0
23181msgid "Close"23199msgid "Close"
23182msgstr "Fermé"23200msgstr "Fermé"
2318323201
@@ -24753,7 +24771,11 @@
24753msgid "Phase Out products"24771msgid "Phase Out products"
24754msgstr "Produits Supprimés"24772msgstr "Produits Supprimés"
2475524773
24774<<<<<<< TREE
24756#. modules: tender_flow, product_asset, update_client, register_accounting, return_claim, msf_doc_import, supplier_catalogue, purchase_compare_rfq, product_list, stock, reason_types_moves, stock_override, purchase_override, specific_rules, kit, base, msf_tools, sales_followup, account, msf_outgoing, order_nomenclature, msf_field_access_rights, sale, msf_button_access_rights, analytic_distribution, msf_supply_doc_export, consumption_calculation, procurement_request, purchase_allocation_report24775#. modules: tender_flow, product_asset, update_client, register_accounting, return_claim, msf_doc_import, supplier_catalogue, purchase_compare_rfq, product_list, stock, reason_types_moves, stock_override, purchase_override, specific_rules, kit, base, msf_tools, sales_followup, account, msf_outgoing, order_nomenclature, msf_field_access_rights, sale, msf_button_access_rights, analytic_distribution, msf_supply_doc_export, consumption_calculation, procurement_request, purchase_allocation_report
24776=======
24777#. modules: tender_flow, product_asset, update_client, register_accounting, return_claim, msf_doc_import, supplier_catalogue, purchase_compare_rfq, product_list, stock, reason_types_moves, stock_override, purchase_override, specific_rules, kit, base, msf_tools, sales_followup, account, msf_outgoing, order_nomenclature, msf_field_access_rights, sale, msf_button_access_rights, analytic_distribution, msf_supply_doc_export, consumption_calculation, procurement_request, account_hq_entries
24778>>>>>>> MERGE-SOURCE
24757#: report:addons/msf_supply_doc_export/report/report_pick_export_xls.mako:15324779#: report:addons/msf_supply_doc_export/report/report_pick_export_xls.mako:153
24758#: field:account.move.line.reconcile.writeoff,comment:024780#: field:account.move.line.reconcile.writeoff,comment:0
24759#: field:account.commitment,notes:024781#: field:account.commitment,notes:0
@@ -24858,10 +24880,14 @@
24858#: code:addons/msf_doc_import/report/return_from_unit_export.py:12424880#: code:addons/msf_doc_import/report/return_from_unit_export.py:124
24859#: code:addons/stock/report/closed_physical_inventory_report.py:13424881#: code:addons/stock/report/closed_physical_inventory_report.py:134
24860#: code:addons/msf_doc_import/wizard/__init__.py:5724882#: code:addons/msf_doc_import/wizard/__init__.py:57
24883<<<<<<< TREE
24861#: report:addons/purchase_allocation_report/report/po_allocation_report.mako:24424884#: report:addons/purchase_allocation_report/report/po_allocation_report.mako:244
24862#: report:addons/purchase_allocation_report/report/po_line_allocation_report.mako:19824885#: report:addons/purchase_allocation_report/report/po_line_allocation_report.mako:198
24863#: report:po.line.allocation.report:024886#: report:po.line.allocation.report:0
24864#: report:shipment.donation.certificate:024887#: report:shipment.donation.certificate:0
24888=======
24889#: field:finance_price.track_changes,comment:0
24890>>>>>>> MERGE-SOURCE
24865#, python-format24891#, python-format
24866msgid "Comment"24892msgid "Comment"
24867msgstr "Commentaire"24893msgstr "Commentaire"
@@ -24961,10 +24987,11 @@
24961msgid "Social IDs"24987msgid "Social IDs"
24962msgstr "Identité Sociale"24988msgstr "Identité Sociale"
2496324989
24964#. modules: account, register_accounting, product_attributes24990#. modules: account, register_accounting, product_attributes, account_hq_entries
24965#: view:account.bank.statement:024991#: view:account.bank.statement:0
24966#: view:account.bank.statement:024992#: view:account.bank.statement:0
24967#: report:addons/product_attributes/report/standard_price_track_changes.mako:10124993#: report:addons/product_attributes/report/standard_price_track_changes.mako:101
24994#: code:addons/account_hq_entries/report/finance_cost_price.py:72
24968msgid "Transaction"24995msgid "Transaction"
24969msgstr "Transactions"24996msgstr "Transactions"
2497024997
@@ -26226,8 +26253,9 @@
26226msgid "Only products with total expired > 0"26253msgid "Only products with total expired > 0"
26227msgstr "Seuls produits ayant un total d'articles expirés > 0"26254msgstr "Seuls produits ayant un total d'articles expirés > 0"
2622826255
26229#. module: product26256#. module: product, account_hq_entries
26230#: field:product.template,loc_row:026257#: field:product.template,loc_row:0
26258#: field:esc.line.import.rejected,xls_row:0
26231msgid "Row"26259msgid "Row"
26232msgstr "Ligne"26260msgstr "Ligne"
2623326261
@@ -37409,7 +37437,7 @@
37409msgid "On Multiple Doc."37437msgid "On Multiple Doc."
37410msgstr "Sur Plusieurs Documents"37438msgstr "Sur Plusieurs Documents"
3741137439
37412#. modules: tender_flow, financing_contract, product_asset, account_corrections, product_attributes, msf_accrual, analytic_override, sync_client, account_mcdb, res_currency_tables, procurement_request, stock_forecast, board, stock_override, msf_doc_import, stock, finance, msf_homere_interface, base, kit, stock_schedule, account, msf_outgoing, resource, msf_audittrail, stock_move_tracking, msf_supply_doc_export, procurement_cycle, msf_order_date37440#. modules: tender_flow, financing_contract, product_asset, account_corrections, product_attributes, msf_accrual, analytic_override, sync_client, account_mcdb, res_currency_tables, procurement_request, stock_forecast, board, stock_override, msf_doc_import, stock, finance, msf_homere_interface, base, kit, stock_schedule, account, msf_outgoing, resource, msf_audittrail, stock_move_tracking, msf_supply_doc_export, procurement_cycle, msf_order_date, account_hq_entries
37413#: selection:account.aged.trial.balance,filter:037441#: selection:account.aged.trial.balance,filter:0
37414#: report:account.analytic.account.journal:037442#: report:account.analytic.account.journal:0
37415#: field:account.bank.statement,date:037443#: field:account.bank.statement,date:0
@@ -37535,6 +37563,7 @@
37535#: report:addons/account/report/account_employee_ledger.mako:29737563#: report:addons/account/report/account_employee_ledger.mako:297
37536#: selection:wizard.account.employee.balance.tree,filter:037564#: selection:wizard.account.employee.balance.tree,filter:0
37537#: field:signature.line,date:037565#: field:signature.line,date:0
37566#: field:finance_price.track_changes,date:0
37538#, python-format37567#, python-format
37539msgid "Date"37568msgid "Date"
37540msgstr "Date"37569msgstr "Date"
@@ -40501,7 +40530,7 @@
40501msgid "From confirmed to assigned."40530msgid "From confirmed to assigned."
40502msgstr "De confirmé à attribué."40531msgstr "De confirmé à attribué."
4050340532
40504#. modules: tender_flow, account_override, purchase_allocation_report, procurement_cycle, return_claim, supplier_catalogue, mission_stock, stock_override, purchase_compare_rfq, purchase_followup, msf_supply_doc_export, analytic_distribution, product, procurement_request, consumption_calculation, specific_rules, kit, msf_doc_import, procurement_report, sales_followup, account, msf_outgoing, product_attributes, sale, sourcing, stock, stock_batch_recall,msf_tools40533#. modules: tender_flow, account_override, purchase_allocation_report, procurement_cycle, return_claim, supplier_catalogue, mission_stock, stock_override, purchase_compare_rfq, purchase_followup, msf_supply_doc_export, analytic_distribution, product, procurement_request, consumption_calculation, specific_rules, kit, msf_doc_import, procurement_report, sales_followup, account, msf_outgoing, product_attributes, sale, sourcing, stock, stock_batch_recall,msf_tools, account_hq_entries
40505#: field:account.analytic.line,product_uom_id:040534#: field:account.analytic.line,product_uom_id:0
40506#: selection:account.journal.column,field:040535#: selection:account.journal.column,field:0
40507#: field:account.move.line,product_uom_id:040536#: field:account.move.line,product_uom_id:0
@@ -40650,6 +40679,7 @@
40650#: code:addons/stock/report/closed_physical_inventory_report.py:12440679#: code:addons/stock/report/closed_physical_inventory_report.py:124
40651#: field:stock.pipe.per.product.instance.prod.lines,uom_id:040680#: field:stock.pipe.per.product.instance.prod.lines,uom_id:0
40652#: field:report.batch.recall,uom_id:040681#: field:report.batch.recall,uom_id:0
40682#: field:esc.invoice.line,uom_id:0
40653#, python-format40683#, python-format
40654msgid "UoM"40684msgid "UoM"
40655msgstr "UdM"40685msgstr "UdM"
@@ -42310,6 +42340,7 @@
42310#: view:account.invoice.import:042340#: view:account.invoice.import:0
42311#: view:hq.entries.import:042341#: view:hq.entries.import:0
42312#: view:account.cv.import:042342#: view:account.cv.import:0
42343#: view:esc.line.import:0
42313msgid "Update"42344msgid "Update"
42314msgstr "Mettre à jour"42345msgstr "Mettre à jour"
4231542346
@@ -43761,7 +43792,7 @@
43761msgid "product code"43792msgid "product code"
43762msgstr "code produit"43793msgstr "code produit"
4376343794
43764#. modules: account, analytic_distribution_supply, finance, register_accounting, account_override, msf_audittrail, analytic_distribution43795#. modules: account, analytic_distribution_supply, finance, register_accounting, account_override, msf_audittrail, analytic_distribution, account_hq_entries
43765#: view:account.invoice.line:043796#: view:account.invoice.line:0
43766#: field:account.invoice.tax,invoice_id:043797#: field:account.invoice.tax,invoice_id:0
43767#: model:ir.model,name:account.model_account_invoice_line43798#: model:ir.model,name:account.model_account_invoice_line
@@ -43775,6 +43806,7 @@
43775#: model:ir.model,name:finance.model_account_invoice_line43806#: model:ir.model,name:finance.model_account_invoice_line
43776#: model:ir.model,name:msf_audittrail.model_account_invoice_line43807#: model:ir.model,name:msf_audittrail.model_account_invoice_line
43777#: model:ir.model,name:register_accounting.model_wizard_account_invoice_line43808#: model:ir.model,name:register_accounting.model_wizard_account_invoice_line
43809#: field:finance_price.track_changes,invoice_line_id:0
43778msgid "Invoice Line"43810msgid "Invoice Line"
43779msgstr "Ligne de Facture"43811msgstr "Ligne de Facture"
4378043812
@@ -44976,6 +45008,7 @@
44976#: field:signature.export.wizard,end_date:045008#: field:signature.export.wizard,end_date:0
44977#: field:hq.entries.import,end_date:045009#: field:hq.entries.import,end_date:0
44978#: field:signature.image,to_date:045010#: field:signature.image,to_date:0
45011#: field:esc.line.import,end_date:0
44979msgid "End Date"45012msgid "End Date"
44980msgstr "Date de Clôture"45013msgstr "Date de Clôture"
4498145014
@@ -45389,6 +45422,7 @@
45389#. module: msf_homere_interface, account_hq_entries45422#. module: msf_homere_interface, account_hq_entries
45390#: field:hr.payroll.import.confirmation,total:045423#: field:hr.payroll.import.confirmation,total:0
45391#: field:hq.entries.import,created:045424#: field:hq.entries.import,created:0
45425#: field:esc.line.import,created:0
45392msgid "Processed"45426msgid "Processed"
45393msgstr "Traité"45427msgstr "Traité"
4539445428
@@ -45491,7 +45525,7 @@
45491msgid "The currency you want to %s is used in at least one Commitment Voucher which isn't Done."45525msgid "The currency you want to %s is used in at least one Commitment Voucher which isn't Done."
45492msgstr "La devise que vous désirez %s est utilisée dans au moins un Bon d'Engagement non Terminé."45526msgstr "La devise que vous désirez %s est utilisée dans au moins un Bon d'Engagement non Terminé."
4549345527
45494#. modules: account, resource, account_mcdb, msf_instance, analytic, base, msf_audittrail, msf_profile, product_attributes, sync_client, useability_dashboard_and_menu45528#. modules: account, resource, account_mcdb, msf_instance, analytic, base, msf_audittrail, msf_profile, product_attributes, sync_client, useability_dashboard_and_menu, account_hq_entries
45495#: view:account.journal:045529#: view:account.journal:0
45496#: field:account.journal,user_id:045530#: field:account.journal,user_id:0
45497#: view:analytic.entries.report:045531#: view:analytic.entries.report:0
@@ -45529,8 +45563,13 @@
45529#: field:signature.users.allowed,user_id:045563#: field:signature.users.allowed,user_id:0
45530#: field:signature.follow_up,user_id:045564#: field:signature.follow_up,user_id:0
45531#: field:signature.set_user,user_name:045565#: field:signature.set_user,user_name:0
45566<<<<<<< TREE
45532#: code:addons/useability_dashboard_and_menu/report/signature_follow_up_search_report.py:20445567#: code:addons/useability_dashboard_and_menu/report/signature_follow_up_search_report.py:204
45533#: report:signature.follow_up.search.pdf:045568#: report:signature.follow_up.search.pdf:0
45569=======
45570#: code:addons/account_hq_entries/report/finance_cost_price.py:69
45571#: field:finance_price.track_changes,user_id:0
45572>>>>>>> MERGE-SOURCE
45534msgid "User"45573msgid "User"
45535msgstr "Utilisateur"45574msgstr "Utilisateur"
4553645575
@@ -48028,7 +48067,7 @@
48028msgid "Child IDs"48067msgid "Child IDs"
48029msgstr "ID Enfants"48068msgstr "ID Enfants"
4803048069
48031#. modules: purchase, account, finance, account_mcdb, sale, specific_rules, account_override, delete_button, tender_flow, analytic_distribution, msf_budget, register_accounting, msf_accrual, kit, stock48070#. modules: purchase, account, finance, account_mcdb, sale, specific_rules, account_override, delete_button, tender_flow, analytic_distribution, msf_budget, register_accounting, msf_accrual, kit, stock, account_hq_entries
48032#: view:account.common.report:048071#: view:account.common.report:0
48033#: view:account.mcdb:048072#: view:account.mcdb:0
48034#: view:account.chart:048073#: view:account.chart:0
@@ -48052,6 +48091,7 @@
48052#: view:free.allocation.wizard:048091#: view:free.allocation.wizard:0
48053#: view:account.commitment.line:048092#: view:account.commitment.line:0
48054#: view:view.expired.expiring.stock:048093#: view:view.expired.expiring.stock:0
48094#: view:esc.invoice.line:0
48055msgid "Delete"48095msgid "Delete"
48056msgstr "Supprimer"48096msgstr "Supprimer"
4805748097
@@ -48071,7 +48111,7 @@
48071msgid "TVA :"48111msgid "TVA :"
48072msgstr "TVA :"48112msgstr "TVA :"
4807348113
48074#. modules: sourcing, sale, product_attributes, procurement_cycle, finance48114#. modules: sourcing, sale, product_attributes, procurement_cycle, finance, account_hq_entries
48075#: field:sale.report,product_code:048115#: field:sale.report,product_code:0
48076#: field:sale.order.line,product_code:048116#: field:sale.order.line,product_code:0
48077#: report:addons/product_attributes/report/standard_price_track_changes.mako:6948117#: report:addons/product_attributes/report/standard_price_track_changes.mako:69
@@ -48079,7 +48119,11 @@
48079#: report:addons/procurement_cycle/report_doc/replenishment_product_list.mako:12448119#: report:addons/procurement_cycle/report_doc/replenishment_product_list.mako:124
48080#: report:addons/procurement_cycle/report_doc/replenishment_segment.mako:36848120#: report:addons/procurement_cycle/report_doc/replenishment_segment.mako:368
48081#: report:addons/finance/report/fo_follow_up_finance_xls.mako:35248121#: report:addons/finance/report/fo_follow_up_finance_xls.mako:352
48122<<<<<<< TREE
48082#: code:addons/procurement_cycle/replenishment.py:364048123#: code:addons/procurement_cycle/replenishment.py:3640
48124=======
48125#: code:addons/account_hq_entries/report/finance_cost_price.py:51
48126>>>>>>> MERGE-SOURCE
48083msgid "Product code"48127msgid "Product code"
48084msgstr "Code Produit"48128msgstr "Code Produit"
4808548129
@@ -49926,8 +49970,9 @@
49926msgid "Email"49970msgid "Email"
49927msgstr "Courriel"49971msgstr "Courriel"
4992849972
49929#. module: base49973#. module: base, account_hq_entries
49930#: field:workflow.triggers,instance_id:049974#: field:workflow.triggers,instance_id:0
49975#: field:esc.invoice.line,dest_instance_id:0
49931msgid "Destination Instance"49976msgid "Destination Instance"
49932msgstr "Instance de Destination"49977msgstr "Instance de Destination"
4993349978
@@ -53493,7 +53538,7 @@
53493msgid "Ignore Exception"53538msgid "Ignore Exception"
53494msgstr "Ignorer l'Exception"53539msgstr "Ignorer l'Exception"
5349553540
53496#. modules: account, finance, msf_instance, register_accounting, sale, base, msf_tools, mission_stock, sync_client, procurement_cycle, stock53541#. modules: account, finance, msf_instance, register_accounting, sale, base, msf_tools, mission_stock, sync_client, procurement_cycle, stock, account_hq_entries
53497#: view:account.bank.statement:053542#: view:account.bank.statement:0
53498#: report:addons/account/report/account_liquidity_balance.mako:15653543#: report:addons/account/report/account_liquidity_balance.mako:156
53499#: field:workflow.workitem,inst_id:053544#: field:workflow.workitem,inst_id:0
@@ -53528,6 +53573,7 @@
53528#: report:liquidity.position.pdf:053573#: report:liquidity.position.pdf:0
53529#: field:stock.location.instance,instance_id:053574#: field:stock.location.instance,instance_id:0
53530#: report:signature.export.report:053575#: report:signature.export.report:0
53576#: code:addons/account_hq_entries/report/finance_cost_price.py:47
53531msgid "Instance"53577msgid "Instance"
53532msgstr "Instance"53578msgstr "Instance"
5353353579
@@ -56717,7 +56763,7 @@
56717msgid "Operational advance linked po invoices"56763msgid "Operational advance linked po invoices"
56718msgstr "Operational advance linked po invoices"56764msgstr "Operational advance linked po invoices"
5671956765
56720#. modules: purchase, account, base_setup, hr, purchase_double_validation, msf_instance, sale, msf_config_locations, base, base_report_designer, unifield_setup, msf_button_access_rights56766#. modules: purchase, account, base_setup, hr, purchase_double_validation, msf_instance, sale, msf_config_locations, base, base_report_designer, unifield_setup, msf_button_access_rights, account_hq_entries
56721#: field:account.installer,progress:056767#: field:account.installer,progress:0
56722#: field:account.installer.modules,progress:056768#: field:account.installer.modules,progress:0
56723#: field:wizard.multi.charts.accounts,progress:056769#: field:wizard.multi.charts.accounts,progress:0
@@ -56753,6 +56799,7 @@
56753#: field:customer.commitment.setup,progress:056799#: field:customer.commitment.setup,progress:0
56754#: field:previous.fy.dates.setup,progress:056800#: field:previous.fy.dates.setup,progress:0
56755#: field:signature.setup,progress:056801#: field:signature.setup,progress:0
56802#: field:esc_line.setup,progress:0
56756msgid "Configuration Progress"56803msgid "Configuration Progress"
56757msgstr "Progression de la Configuration"56804msgstr "Progression de la Configuration"
5675856805
@@ -57884,10 +57931,12 @@
57884msgid "Invoice Based on Sales Orders"57931msgid "Invoice Based on Sales Orders"
57885msgstr "Facture Basée sur commandes terrains"57932msgstr "Facture Basée sur commandes terrains"
5788657933
57887#. module: transport_mgmt, msf_supply_doc_export57934#. module: transport_mgmt, msf_supply_doc_export, account_hq_entries
57888#: field:international.transport.cost.report,order_id:057935#: field:international.transport.cost.report,order_id:0
57889#: field:local.transport.cost.report,order_id:057936#: field:local.transport.cost.report,order_id:0
57890#: report:addons/msf_supply_doc_export/report/supplier_performance_report_xls.mako:22957937#: report:addons/msf_supply_doc_export/report/supplier_performance_report_xls.mako:229
57938#: view:esc.invoice.line:0
57939#: field:esc.invoice.line,po_name:0
57891msgid "PO Reference"57940msgid "PO Reference"
57892msgstr "Référence BC"57941msgstr "Référence BC"
5789357942
@@ -57903,12 +57952,16 @@
57903msgid "Import Intl Commitments"57952msgid "Import Intl Commitments"
57904msgstr "Import des Engagements"57953msgstr "Import des Engagements"
5790557954
57906#. module: msf_supply_doc_export, register_accounting, stock_override, useability_dashboard_and_menu57955#. module: msf_supply_doc_export, register_accounting, stock_override, useability_dashboard_and_menu, account_hq_entries
57907#: report:po.follow.up_rml:057956#: report:po.follow.up_rml:0
57908#: report:addons/register_accounting/report/fully_report_xls.mako:56657957#: report:addons/register_accounting/report/fully_report_xls.mako:566
57909#: report:addons/stock_override/report/report_stock_move_xls.mako:14057958#: report:addons/stock_override/report/report_stock_move_xls.mako:140
57910#: selection:signature.follow_up,doc_type:057959#: selection:signature.follow_up,doc_type:0
57960<<<<<<< TREE
57911#: code:addons/useability_dashboard_and_menu/report/signature_follow_up_search_report.py:3957961#: code:addons/useability_dashboard_and_menu/report/signature_follow_up_search_report.py:39
57962=======
57963#: field:finance_price.track_changes,stock_picking_id:0
57964>>>>>>> MERGE-SOURCE
57912msgid "IN"57965msgid "IN"
57913msgstr "ENTRANT"57966msgstr "ENTRANT"
5791457967
@@ -60526,7 +60579,7 @@
60526msgid "Pallet"60579msgid "Pallet"
60527msgstr "Palette"60580msgstr "Palette"
6052860581
60529#. modules: msf_outgoing, account_mcdb, stock_override, sale, specific_rules, account_override, sourcing, update_client, stock, analytic_distribution, sync_client, resource, finance, account_mcdb, sales_followup, account, procurement_request, hr, consumption_calculation, account_override, base, purchase_followup, sync_client60582#. modules: msf_outgoing, account_mcdb, stock_override, sale, specific_rules, account_override, sourcing, update_client, stock, analytic_distribution, sync_client, resource, finance, account_mcdb, sales_followup, account, procurement_request, hr, consumption_calculation, account_override, base, purchase_followup, sync_client, product
60530#: field:output.currency.for.export,state:060583#: field:output.currency.for.export,state:0
60531#: field:account.move,register_line_id:060584#: field:account.move,register_line_id:0
60532#: field:res.partner,by_invoice_type:060585#: field:res.partner,by_invoice_type:0
@@ -60590,6 +60643,7 @@
60590#: field:wizard.account.employee.balance.tree,display_load_button:060643#: field:wizard.account.employee.balance.tree,display_load_button:0
60591#: field:signature.add_user.wizard,signature_id:060644#: field:signature.add_user.wizard,signature_id:0
60592#: field:signature.document.wizard,user_id:060645#: field:signature.document.wizard,user_id:0
60646#: field:product.template,finance_price_currency_id:0
60593msgid "unknown"60647msgid "unknown"
60594msgstr "inconnu"60648msgstr "inconnu"
6059560649
@@ -68707,12 +68761,13 @@
68707msgid "Supplier Information"68761msgid "Supplier Information"
68708msgstr "Fournisseur - Informations"68762msgstr "Fournisseur - Informations"
6870968763
68710#. module: msf_outgoing68764#. module: msf_outgoing, account_hq_entries
68711#: view:ppl.processor:068765#: view:ppl.processor:0
68712#: view:stock.incoming.processor:068766#: view:stock.incoming.processor:0
68713#: view:internal.picking.processor:068767#: view:internal.picking.processor:0
68714#: view:outgoing.delivery.processor:068768#: view:outgoing.delivery.processor:0
68715#: view:stock.picking:068769#: view:stock.picking:0
68770#: view:esc.line.import:0
68716msgid "Reset"68771msgid "Reset"
68717msgstr "RÀZ"68772msgstr "RÀZ"
6871868773
@@ -74064,6 +74119,8 @@
74064#: field:hq.entries.import,error:074119#: field:hq.entries.import,error:0
74065#: selection:hq.entries.import,state:074120#: selection:hq.entries.import,state:0
74066#: selection:account.cv.import,state:074121#: selection:account.cv.import,state:0
74122#: field:esc.line.import,error:0
74123#: selection:esc.line.import,state:0
74067#, python-format, python-format74124#, python-format, python-format
74068msgid "Error"74125msgid "Error"
74069msgstr "Erreur"74126msgstr "Erreur"
@@ -74519,6 +74576,7 @@
74519#: field:account.invoice.import,error_ids:074576#: field:account.invoice.import,error_ids:0
74520#: field:hq.entries.import,nberrors:074577#: field:hq.entries.import,nberrors:0
74521#: field:account.cv.import,error_ids:074578#: field:account.cv.import,error_ids:0
74579#: field:esc.line.import,nberrors:0
74522#, python-format74580#, python-format
74523msgid "Errors"74581msgid "Errors"
74524msgstr "Erreurs"74582msgstr "Erreurs"
@@ -74637,7 +74695,7 @@
74637msgid "Line %s :: The move is not 'Available'. Check the state of the stock move and re-try."74695msgid "Line %s :: The move is not 'Available'. Check the state of the stock move and re-try."
74638msgstr "Ligne %s :: Le mouvement n'est pas 'Disponible'. Vérifier le statut du mouvement de Stock et ré-essayez."74696msgstr "Ligne %s :: Le mouvement n'est pas 'Disponible'. Vérifier le statut du mouvement de Stock et ré-essayez."
7463974697
74640#. modules: purchase, account, msf_outgoing, analytic_distribution_supply, finance, product_asset, account_override, base, msf_audittrail, register_accounting, analytic_distribution74698#. modules: purchase, account, msf_outgoing, analytic_distribution_supply, finance, product_asset, account_override, base, msf_audittrail, register_accounting, analytic_distribution, account_hq_entries
74641#: view:account.invoice:074699#: view:account.invoice:0
74642#: view:account.invoice.report:074700#: view:account.invoice.report:0
74643#: report:account.invoice2:074701#: report:account.invoice2:0
@@ -74670,6 +74728,8 @@
74670#: view:account.direct.invoice.wizard:074728#: view:account.direct.invoice.wizard:0
74671#: field:account.invoice.import,invoice_id:074729#: field:account.invoice.import,invoice_id:0
74672#: field:account.cv.import,invoice_id:074730#: field:account.cv.import,invoice_id:0
74731#: field:finance_price.track_changes,invoice_id:0
74732#: selection:finance_price.track_changes,matching_type:0
74673msgid "Invoice"74733msgid "Invoice"
74674msgstr "Facture"74734msgstr "Facture"
7467574735
@@ -75223,6 +75283,7 @@
75223#: field:signature.export.wizard,start_date:075283#: field:signature.export.wizard,start_date:0
75224#: field:hq.entries.import,start_date:075284#: field:hq.entries.import,start_date:0
75225#: field:signature.image,from_date:075285#: field:signature.image,from_date:0
75286#: field:esc.line.import,start_date:0
75226msgid "Start Date"75287msgid "Start Date"
75227msgstr "Date de Début"75288msgstr "Date de Début"
7522875289
@@ -76460,7 +76521,7 @@
76460msgid "Canada/Yukon"76521msgid "Canada/Yukon"
76461msgstr "Canada/Yukon"76522msgstr "Canada/Yukon"
7646276523
76463#. modules: purchase_allocation_report, unifield_setup, sales_followup, msf_doc_import, purchase, account, useability_dashboard_and_menu76524#. modules: purchase_allocation_report, unifield_setup, sales_followup, msf_doc_import, purchase, account, useability_dashboard_and_menu, account_hq_entries
76464#: report:addons/purchase_allocation_report/report/po_line_allocation_report.mako:14776525#: report:addons/purchase_allocation_report/report/po_line_allocation_report.mako:147
76465#: report:purchase.order.allocation.report:076526#: report:purchase.order.allocation.report:0
76466#: field:purchase.order.line.allocation.report,order_id:076527#: field:purchase.order.line.allocation.report,order_id:0
@@ -76471,7 +76532,11 @@
76471#: code:addons/msf_doc_import/wizard/wizard_import_ad_line.py:12276532#: code:addons/msf_doc_import/wizard/wizard_import_ad_line.py:122
76472#: field:account.invoice.tax,purchase_id:076533#: field:account.invoice.tax,purchase_id:0
76473#: selection:signature.follow_up,doc_type:076534#: selection:signature.follow_up,doc_type:0
76535<<<<<<< TREE
76474#: code:addons/useability_dashboard_and_menu/report/signature_follow_up_search_report.py:3276536#: code:addons/useability_dashboard_and_menu/report/signature_follow_up_search_report.py:32
76537=======
76538#: selection:finance_price.track_changes,matching_type:0
76539>>>>>>> MERGE-SOURCE
76475#, python-format76540#, python-format
76476msgid "PO"76541msgid "PO"
76477msgstr "BC"76542msgstr "BC"
@@ -77019,7 +77084,7 @@
77019msgid "# of lines imported"77084msgid "# of lines imported"
77020msgstr "# de lignes importées"77085msgstr "# de lignes importées"
7702177086
77022#. modules: purchase, account, msf_outgoing, finance, purchase_override, sales_followup, supplier_catalogue, sale, product, kit, account_override, purchase_allocation_report, order_types, tender_flow, msf_supply_doc_export, msf_doc_import, register_accounting, stock, purchase_followup, consumption_calculation, procurement_request77087#. modules: purchase, account, msf_outgoing, finance, purchase_override, sales_followup, supplier_catalogue, sale, product, kit, account_override, purchase_allocation_report, order_types, tender_flow, msf_supply_doc_export, msf_doc_import, register_accounting, stock, purchase_followup, consumption_calculation, procurement_request, account_hq_entries
77023#: field:account.invoice.line,price_unit:077088#: field:account.invoice.line,price_unit:0
77024#: report:account.invoice2:077089#: report:account.invoice2:0
77025#: report:allocation.invoices.report:077090#: report:allocation.invoices.report:0
@@ -77079,7 +77144,12 @@
77079#: report:addons/msf_supply_doc_export/report/report_tender_xls.mako:7377144#: report:addons/msf_supply_doc_export/report/report_tender_xls.mako:73
77080#: code:addons/msf_doc_import/wizard/__init__.py:9277145#: code:addons/msf_doc_import/wizard/__init__.py:92
77081#: field:tender.line,price_unit:077146#: field:tender.line,price_unit:0
77147<<<<<<< TREE
77082#: report:shipment.donation.certificate:077148#: report:shipment.donation.certificate:0
77149=======
77150#: field:esc.invoice.line,price_unit:0
77151#: field:finance_price.track_changes,price_unit:0
77152>>>>>>> MERGE-SOURCE
77083#, python-format77153#, python-format
77084msgid "Unit Price"77154msgid "Unit Price"
77085msgstr "Prix Unitaire"77155msgstr "Prix Unitaire"
@@ -79795,7 +79865,13 @@
79795msgid "Date cancel"79865msgid "Date cancel"
79796msgstr "Date d'annulation"79866msgstr "Date d'annulation"
7979779867
79868<<<<<<< TREE
79798#. modules: sales_followup, msf_outgoing, procurement_request, consumption_calculation, sale, purchase_allocation_report, msf_supply_doc_export79869#. modules: sales_followup, msf_outgoing, procurement_request, consumption_calculation, sale, purchase_allocation_report, msf_supply_doc_export
79870=======
79871#. modules: sales_followup, consumption_calculation, procurement_request, msf_supply_doc_export, sale, msf_outgoing, account_hq_entries
79872#: view:sale.order:0
79873#: field:sale.order,requestor:0
79874>>>>>>> MERGE-SOURCE
79799#: field:product.history.consumption,requestor_id:079875#: field:product.history.consumption,requestor_id:0
79800#: field:product.likely.expire.report,requestor_id:079876#: field:product.likely.expire.report,requestor_id:0
79801#: field:weekly.forecast.report,requestor_id:079877#: field:weekly.forecast.report,requestor_id:0
@@ -79811,7 +79887,12 @@
79811#: field:purchase.order.line.allocation.report,requestor:079887#: field:purchase.order.line.allocation.report,requestor:0
79812#: field:internal.request.import,imp_requestor:079888#: field:internal.request.import,imp_requestor:0
79813#: field:internal.request.import,in_requestor:079889#: field:internal.request.import,in_requestor:0
79890<<<<<<< TREE
79814#: report:addons/sales_followup/report/ir_follow_up_location_report_xls.mako:31379891#: report:addons/sales_followup/report/ir_follow_up_location_report_xls.mako:313
79892=======
79893#: field:stock.picking,requestor:0
79894#: view:esc.invoice.line:0
79895>>>>>>> MERGE-SOURCE
79815msgid "Requestor"79896msgid "Requestor"
79816msgstr "Demandeur"79897msgstr "Demandeur"
7981779898
@@ -81637,6 +81718,8 @@
81637#: view:replenishment.consolidated_oc.import:081718#: view:replenishment.consolidated_oc.import:0
81638#: view:wizard.import.ad.line:081719#: view:wizard.import.ad.line:0
81639#: view:account.cv.import:081720#: view:account.cv.import:0
81721#: view:esc.line.import:0
81722#: field:esc.line.import.rejected,wiz_id:0
81640msgid "Import"81723msgid "Import"
81641msgstr "Importer"81724msgstr "Importer"
8164281725
@@ -82345,6 +82428,8 @@
82345#: field:msf.accrual.line,state:082428#: field:msf.accrual.line,state:0
82346#: field:hq.entries.import,state:082429#: field:hq.entries.import,state:0
82347#: field:account.cv.import,state:082430#: field:account.cv.import,state:0
82431#: field:esc.invoice.line,state:0
82432#: field:esc.line.import,state:0
82348#, python-format82433#, python-format
82349msgid "State"82434msgid "State"
82350msgstr "Statut"82435msgstr "Statut"
@@ -83091,7 +83176,7 @@
83091msgid "SFTP connection succeeded"83176msgid "SFTP connection succeeded"
83092msgstr "SFTP connection succeeded"83177msgstr "SFTP connection succeeded"
8309383178
83094#. modules: tender_flow, product_nomenclature, product_asset, account_override, product_attributes, register_accounting, product_expiry, procurement_cycle, return_claim, supplier_catalogue, import_data, mission_stock, unifield_setup, stock_forecast, stock_batch_recall, order_types, msf_doc_import, purchase_followup, product, stock_override, stock_schedule, service_purchasing, consumption_calculation, purchase_override, specific_rules, kit, base, product_list, product_manufacturer, procurement_report, threshold_value, purchase, account, msf_outgoing, stock_move_tracking, purchase_allocation_report, procurement_auto, sale, transport_mgmt, procurement, sourcing, msf_audittrail, purchase_msf, stock, sync_so, msf_tools, analytic_distribution83179#. modules: tender_flow, product_nomenclature, product_asset, account_override, product_attributes, register_accounting, product_expiry, procurement_cycle, return_claim, supplier_catalogue, import_data, mission_stock, unifield_setup, stock_forecast, stock_batch_recall, order_types, msf_doc_import, purchase_followup, product, stock_override, stock_schedule, service_purchasing, consumption_calculation, purchase_override, specific_rules, kit, base, product_list, product_manufacturer, procurement_report, threshold_value, purchase, account, msf_outgoing, stock_move_tracking, purchase_allocation_report, procurement_auto, sale, transport_mgmt, procurement, sourcing, msf_audittrail, purchase_msf, stock, sync_so, msf_tools, analytic_distribution, account_hq_entries
83095#: field:account.analytic.line,product_id:083180#: field:account.analytic.line,product_id:0
83096#: view:account.entries.report:083181#: view:account.entries.report:0
83097#: field:account.entries.report,product_id:083182#: field:account.entries.report,product_id:0
@@ -83299,6 +83384,9 @@
83299#: field:account.commitment.line,line_product_id:083384#: field:account.commitment.line,line_product_id:0
83300#: field:product.ed_bn.mass.update.history,product_id:083385#: field:product.ed_bn.mass.update.history,product_id:0
83301#: field:stock.picking,product_id:083386#: field:stock.picking,product_id:0
83387#: view:esc.invoice.line:0
83388#: field:esc.invoice.line,product_id:0
83389#: field:finance_price.track_changes,product_id:0
83302#, python-format83390#, python-format
83303msgid "Product"83391msgid "Product"
83304msgstr "Produit"83392msgstr "Produit"
@@ -83557,6 +83645,7 @@
83557#: field:wizard.register.import,file:083645#: field:wizard.register.import,file:0
83558#: field:account.invoice.import,file:083646#: field:account.invoice.import,file:0
83559#: field:account.cv.import,file:083647#: field:account.cv.import,file:0
83648#: field:esc.line.import,file:0
83560msgid "File"83649msgid "File"
83561msgstr "Fichier"83650msgstr "Fichier"
8356283651
@@ -92376,6 +92465,7 @@
92376#: report:addons/msf_outgoing/report/freight_manifest_xls.mako:37292465#: report:addons/msf_outgoing/report/freight_manifest_xls.mako:372
92377#: report:freight_manifest:092466#: report:freight_manifest:0
92378#: field:hq.entries.import,total:092467#: field:hq.entries.import,total:0
92468#: field:esc.line.import,total:0
92379#, python-format92469#, python-format
92380msgid "Total"92470msgid "Total"
92381msgstr "Total"92471msgstr "Total"
@@ -93399,7 +93489,7 @@
93399msgid "America/Anguilla"93489msgid "America/Anguilla"
93400msgstr "America/Anguilla"93490msgstr "America/Anguilla"
9340193491
93402#. modules: tender_flow, financing_contract, account_override, product_attributes, msf_accrual, msf_doc_import, finance, base_setup, account_mcdb, res_currency_tables, supplier_catalogue, stock_override, product_asset, analytic_override, purchase_compare_rfq, msf_supply_doc_export, analytic_distribution, product, msf_homere_interface, msf_instance, register_accounting, specific_rules, kit, base, msf_currency_revaluation, account_subscription, return_claim, res_currency_functional, msf_budget, purchase, account, msf_outgoing, msf_partner, purchase_allocation_report, sale, transport_mgmt, stock, sync_so, purchase_followup, consumption_calculation, procurement_request, order_types, purchase_override93492#. modules: tender_flow, financing_contract, account_override, product_attributes, msf_accrual, msf_doc_import, finance, base_setup, account_mcdb, res_currency_tables, supplier_catalogue, stock_override, product_asset, analytic_override, purchase_compare_rfq, msf_supply_doc_export, analytic_distribution, product, msf_homere_interface, msf_instance, register_accounting, specific_rules, kit, base, msf_currency_revaluation, account_subscription, return_claim, res_currency_functional, msf_budget, purchase, account, msf_outgoing, msf_partner, purchase_allocation_report, sale, transport_mgmt, stock, sync_so, purchase_followup, consumption_calculation, procurement_request, order_types, purchase_override, account_hq_entries
93403#: view:account.account:093493#: view:account.account:0
93404#: report:account.analytic.account.journal:093494#: report:account.analytic.account.journal:0
93405#: view:account.analytic.line:093495#: view:account.analytic.line:0
@@ -93589,7 +93679,11 @@
93589#: report:addons/account/report/account_employee_ledger.mako:31593679#: report:addons/account/report/account_employee_ledger.mako:315
93590#: report:addons/finance/report/account_employee_balance_tree_xls.mako:34593680#: report:addons/finance/report/account_employee_balance_tree_xls.mako:345
93591#: report:addons/account/report/export_cv.mako:11793681#: report:addons/account/report/export_cv.mako:117
93682<<<<<<< TREE
93592#: report:shipment.donation.certificate:093683#: report:shipment.donation.certificate:0
93684=======
93685#: field:esc.invoice.line,currency_id:0
93686>>>>>>> MERGE-SOURCE
93593#, python-format93687#, python-format
93594msgid "Currency"93688msgid "Currency"
93595msgstr "Devise"93689msgstr "Devise"
@@ -96551,6 +96645,7 @@
96551#: report:account.invoice2:096645#: report:account.invoice2:0
96552#: code:addons/account_override/res_company.py:4096646#: code:addons/account_override/res_company.py:40
96553#: report:addons/account/report/export_invoice.mako:10496647#: report:addons/account/report/export_invoice.mako:104
96648#: field:hq.entries.split,document_date:0
96554#, python-format96649#, python-format
96555msgid "Document Date"96650msgid "Document Date"
96556msgstr "Date du Document"96651msgstr "Date du Document"
@@ -97277,7 +97372,11 @@
97277#: view:signature.set_user:097372#: view:signature.set_user:0
97278#: view:account.cv.import:097373#: view:account.cv.import:0
97279#: view:split.composition.item.wizard:097374#: view:split.composition.item.wizard:0
97375<<<<<<< TREE
97280#: view:signature.follow_up.search.wizard:097376#: view:signature.follow_up.search.wizard:0
97377=======
97378#: view:esc.line.import:0
97379>>>>>>> MERGE-SOURCE
97281#, python-format97380#, python-format
97282msgid "Cancel"97381msgid "Cancel"
97283msgstr "Annuler"97382msgstr "Annuler"
@@ -97928,7 +98027,7 @@
97928msgid "Removal date"98027msgid "Removal date"
97929msgstr "Date de Retrait"98028msgstr "Date de Retrait"
9793098029
97931#. modules: msf_budget, sync_client, res_currency_tables, financing_contract, msf_homere_interface, msf_instance, export_import_lang, msf_outgoing, msf_doc_import, product_attributes98030#. modules: msf_budget, sync_client, res_currency_tables, financing_contract, msf_homere_interface, msf_instance, export_import_lang, msf_outgoing, msf_doc_import, product_attributes, account_hq_entries
97932#: view:base.language.export:098031#: view:base.language.export:0
97933#: view:base.language.import:098032#: view:base.language.import:0
97934#: view:msf.language.import:098033#: view:msf.language.import:0
@@ -97942,6 +98041,7 @@
97942#: view:ppl.set_pack_on_lines:098041#: view:ppl.set_pack_on_lines:0
97943#: code:addons/msf_doc_import/purchase_order.py:6198042#: code:addons/msf_doc_import/purchase_order.py:61
97944#: view:product.ask.activate.wizard:098043#: view:product.ask.activate.wizard:0
98044#: view:esc.line.import:0
97945#, python-format98045#, python-format
97946msgid "OK"98046msgid "OK"
97947msgstr "OK"98047msgstr "OK"
@@ -98423,7 +98523,7 @@
98423msgid "To"98523msgid "To"
98424msgstr "À"98524msgstr "À"
9842598525
98426#. modules: delivery_mechanism, account, msf_outgoing, msf_homere_interface, sync_client, stock_override, kit, account_override, register_accounting, msf_doc_import, return_claim, stock98526#. modules: delivery_mechanism, account, msf_outgoing, msf_homere_interface, sync_client, stock_override, kit, account_override, register_accounting, msf_doc_import, return_claim, stock, account_hq_entries
98427#: view:account.automatic.reconcile:098527#: view:account.automatic.reconcile:0
98428#: view:account.use.model:098528#: view:account.use.model:0
98429#: view:debit.note.import.invoice:098529#: view:debit.note.import.invoice:0
@@ -98482,6 +98582,7 @@
98482#: view:wizard.common.import.line:098582#: view:wizard.common.import.line:0
98483#: selection:stock.move.in.processor,sequence_issue:098583#: selection:stock.move.in.processor,sequence_issue:0
98484#: view:account.cv.import:098584#: view:account.cv.import:0
98585#: view:hq.entries.import:0
98485msgid "Ok"98586msgid "Ok"
98486msgstr "Ok"98587msgstr "Ok"
9848798588
@@ -99471,11 +99572,12 @@
99471" This module aims at set documents to 'Done' state.\n"99572" This module aims at set documents to 'Done' state.\n"
99472" "99573" "
9947399574
99474#. modules: procurement, resource, stock99575#. modules: procurement, resource, stock, account_hq_entries
99475#: view:procurement.order:099576#: view:procurement.order:0
99476#: field:procurement.order,name:099577#: field:procurement.order,name:0
99477#: view:resource.calendar.leaves:099578#: view:resource.calendar.leaves:0
99478#: view:stock.move:099579#: view:stock.move:0
99580#: field:esc.line.import.rejected,error:0
99479msgid "Reason"99581msgid "Reason"
99480msgstr "Motif"99582msgstr "Motif"
9948199583
@@ -100058,7 +100160,7 @@
100058msgid "Monthly review consumption line"100160msgid "Monthly review consumption line"
100059msgstr "Ligne de Révision Mensuelle des Consommations"100161msgstr "Ligne de Révision Mensuelle des Consommations"
100060100162
100061#. modules: purchase, account, base_setup, hr, import_data, msf_instance, sale, msf_config_locations, export_import_lang, base, base_report_designer, unifield_setup, report_webkit, purchase_double_validation, msf_button_access_rights100163#. modules: purchase, account, base_setup, hr, import_data, msf_instance, sale, msf_config_locations, export_import_lang, base, base_report_designer, unifield_setup, report_webkit, purchase_double_validation, msf_button_access_rights, account_hq_entries
100062#: field:account.installer,config_logo:0100164#: field:account.installer,config_logo:0
100063#: field:account.installer.modules,config_logo:0100165#: field:account.installer.modules,config_logo:0
100064#: field:wizard.multi.charts.accounts,config_logo:0100166#: field:wizard.multi.charts.accounts,config_logo:0
@@ -100113,6 +100215,7 @@
100113#: field:signature.image,pngb64:0100215#: field:signature.image,pngb64:0
100114#: field:signature.line,image_id:0100216#: field:signature.line,image_id:0
100115#: field:signature.setup,config_logo:0100217#: field:signature.setup,config_logo:0
100218#: field:esc_line.setup,config_logo:0
100116msgid "Image"100219msgid "Image"
100117msgstr "Image"100220msgstr "Image"
100118100221
@@ -103726,12 +103829,13 @@
103726msgstr " Import en cours... \n"103829msgstr " Import en cours... \n"
103727" Veuillez attendre que l'import soit terminer avant de faire des modifications."103830" Veuillez attendre que l'import soit terminer avant de faire des modifications."
103728103831
103729#. modules: msf_doc_import, msf_outgoing, msf_printed_documents103832#. modules: msf_doc_import, msf_outgoing, msf_printed_documents, account_hq_entries
103730#: code:addons/msf_doc_import/wizard/wizard_import_ppl_to_create_ship.py:71103833#: code:addons/msf_doc_import/wizard/wizard_import_ppl_to_create_ship.py:71
103731#: report:addons/msf_outgoing/report/pre_packing_excel_report_xls.mako:192103834#: report:addons/msf_outgoing/report/pre_packing_excel_report_xls.mako:192
103732#: view:shipment:0103835#: view:shipment:0
103733#: report:addons/msf_outgoing/report/freight_manifest_xls.mako:238103836#: report:addons/msf_outgoing/report/freight_manifest_xls.mako:238
103734#: report:freight_manifest:0103837#: report:freight_manifest:0
103838#: view:esc.invoice.line:0
103735#, python-format103839#, python-format
103736msgid "Consignee"103840msgid "Consignee"
103737msgstr "Destinataire"103841msgstr "Destinataire"
@@ -105612,8 +105716,9 @@
105612msgid "Processing Qty can't be larger than move qty."105716msgid "Processing Qty can't be larger than move qty."
105613msgstr "La qté à traiter ne peut être plus grande que la qté du mouvement."105717msgstr "La qté à traiter ne peut être plus grande que la qté du mouvement."
105614105718
105615#. module: stock105719#. module: stock, account_hq_entries
105616#: field:stock.move,qty_processed:0105720#: field:stock.move,qty_processed:0
105721#: code:addons/account_hq_entries/report/finance_cost_price.py:74
105617msgid "Qty Processed"105722msgid "Qty Processed"
105618msgstr "Qté Taitée"105723msgstr "Qté Taitée"
105619105724
@@ -108523,9 +108628,10 @@
108523msgid "Generated according to latest IR's RDD (from most recent Order calc which is now closed)."108628msgid "Generated according to latest IR's RDD (from most recent Order calc which is now closed)."
108524msgstr "Généré en fonction de la DLS du dernier DI (depuis le plus récent Calcul de commande fermé)."108629msgstr "Généré en fonction de la DLS du dernier DI (depuis le plus récent Calcul de commande fermé)."
108525108630
108526#. module: procurement_cycle108631#. module: procurement_cycle, account_hq_entries
108527#: view:replenishment.segment:0108632#: view:replenishment.segment:0
108528#: field:replenishment.segment,last_generation:0108633#: field:replenishment.segment,last_generation:0
108634#: code:addons/account_hq_entries/report/finance_cost_price.py:63
108529msgid "Generation Date"108635msgid "Generation Date"
108530msgstr "Date Génération"108636msgstr "Date Génération"
108531108637
@@ -117771,6 +117877,7 @@
117771117877
117772#. module: account_hq_entries117878#. module: account_hq_entries
117773#: selection:hq.entries.import,state:0117879#: selection:hq.entries.import,state:0
117880#: selection:esc.line.import,state:0
117774msgid "In-progress"117881msgid "In-progress"
117775msgstr "En cours"117882msgstr "En cours"
117776117883
@@ -118884,6 +118991,7 @@
118884#: view:account.bank.statement.line:0118991#: view:account.bank.statement.line:0
118885msgid "Only This Journal"118992msgid "Only This Journal"
118886msgstr "Seulement Ce Journal"118993msgstr "Seulement Ce Journal"
118994<<<<<<< TREE
118887118995
118888#. module: msf_doc_import118996#. module: msf_doc_import
118889#: code:addons/msf_doc_import/wizard/wizard_po_simulation_screen.py:1058118997#: code:addons/msf_doc_import/wizard/wizard_po_simulation_screen.py:1058
@@ -119224,3 +119332,366 @@
119224#: report:shipment.donation.certificate:0119332#: report:shipment.donation.certificate:0
119225msgid "Additional items:"119333msgid "Additional items:"
119226msgstr "Éléments supplémentaires:"119334msgstr "Éléments supplémentaires:"
119335=======
119336
119337#. module: account_hq_entries
119338#: view:esc_line.setup:0
119339#: model:ir.actions.act_window,name:account_hq_entries.action_esc_line_setup
119340msgid "Activate International Invoices Lines"
119341msgstr "Activer les Lignes de Factures Internationales"
119342
119343#. module: account_hq_entries
119344#: field:esc_line.setup,esc_line:0
119345msgid "Activate International Invoices Lines ?"
119346msgstr "Activer les Lignes de Factures Internationales ?"
119347
119348#. module: account_hq_entries
119349#: field:esc.invoice.line,consignee_cc_id:0
119350msgid "Consignee Cost Center"
119351msgstr "Centre de Coût de Destination"
119352
119353#. module: account_hq_entries
119354#: code:addons/account_hq_entries/wizard/esc_lines_import.py:222
119355#, python-format
119356msgid "Consignee Cost Center/Instance %s not found or does not match any active instance."
119357msgstr "Centre coût / Instance de Destination %s non trouvé ou ne correspondant pas à une instance active."
119358
119359#. module: account_hq_entries
119360#: field:esc.invoice.line,imported_consignee_instance:0
119361msgid "Consignee Instance"
119362msgstr "Instance Destinataire"
119363
119364#. module: account_hq_entries
119365#: code:addons/account_hq_entries/wizard/esc_lines_import.py:260
119366#, python-format
119367msgid "Currency is mandatory."
119368msgstr "Devise obligatoire."
119369
119370#. module: account_hq_entries
119371#: model:ir.actions.server,name:account_hq_entries.esc_line_delete_action
119372msgid "Delete Selected draft entries"
119373msgstr "Supprimer les lignes brouillon sélectionnées"
119374
119375#. module: account_hq_entries
119376#: view:esc.invoice.line:0
119377msgid "Do you want to delete this line ?"
119378msgstr "Voulez-vous supprimer cette ligne ?"
119379
119380#. module: account_hq_entries
119381#: view:esc.line.import:0
119382msgid "Download Empty Template"
119383msgstr "Télécharger le modèle"
119384
119385#. module: account_hq_entries
119386#: view:esc.line.import:0
119387msgid "Download Rejected Lines"
119388msgstr "Télécharger les lignes rejetées"
119389
119390#. module: product
119391#: selection:product.mass.update,type_of_ed_bn:0
119392msgid "ED Only"
119393msgstr "Seulement DE"
119394
119395#. module: account_hq_entries
119396#: field:esc.invoice.line,shipment_ref:0
119397msgid "Field mapping with IN"
119398msgstr "Mappage avec IN"
119399
119400#. module: product
119401#: selection:product.price.type,field:0
119402#: field:product.template,finance_price:0
119403msgid "Finance Cost Price"
119404msgstr "Prix Finance"
119405
119406#. module: account_hq_entries
119407#: model:ir.model,name:account_hq_entries.model_finance_price_track_changes
119408msgid "Finance Price Track changes"
119409msgstr "Changements du Prix Finance"
119410
119411#. module: product
119412#: view:product.product:0
119413msgid "HQ Merge product"
119414msgstr "Fusion Siège de produits"
119415
119416#. module: account_hq_entries
119417#: field:esc.invoice.line,in_number:0
119418msgid "IN Number"
119419msgstr "Numéro IN"
119420
119421#. module: account_hq_entries
119422#: code:addons/account_hq_entries/wizard/esc_lines_import.py:82
119423#: code:addons/account_hq_entries/wizard/esc_lines_import.py:134
119424#: model:ir.model,name:account_hq_entries.model_esc_line_import
119425#, python-format
119426msgid "Import International Invoices Lines"
119427msgstr "Import de Lignes de Factures Internationales"
119428
119429#. module: account_hq_entries
119430#: code:addons/account_hq_entries/wizard/esc_lines_import.py:321
119431#, python-format
119432msgid "Imported with error(s)"
119433msgstr "Importé avec des erreurs"
119434
119435#. module: account_hq_entries
119436#: view:esc.invoice.line:0
119437#: model:ir.model,name:account_hq_entries.model_esc_invoice_line
119438msgid "International Invoices Line"
119439msgstr "Ligne de Factures Internationales"
119440
119441#. module: account_hq_entries
119442#: model:ir.actions.act_window,name:account_hq_entries.esc_invoice_line_action
119443#: model:ir.ui.menu,name:account_hq_entries.esc_invoice_line_menu
119444msgid "International Invoices Lines"
119445msgstr "Lignes de Factures Internationales"
119446
119447#. module: account_hq_entries
119448#: view:esc.line.import:0
119449#: model:ir.actions.server,name:account_hq_entries.esc_line_import_action
119450#: model:ir.ui.menu,name:account_hq_entries.esc_line_import_menu
119451msgid "International Invoices Lines Import"
119452msgstr "Import de Lignes de Factures Internationales"
119453
119454#. module: account_hq_entries
119455#: code:addons/account_hq_entries/wizard/esc_lines_import.py:100
119456#: model:ir.actions.report.xml,name:account_hq_entries.esc_line_import_template
119457#, python-format
119458msgid "International Invoices Lines Template"
119459msgstr "Modèle de Lignes de Factures Internationales"
119460
119461#. module: account_hq_entries
119462#: code:addons/account_hq_entries/wizard/esc_lines_import.py:324
119463#, python-format
119464msgid "International Invoices Lines import successful"
119465msgstr "Import réussi des Lignes de Factures Internationales"
119466
119467#. module: account_hq_entries
119468#: view:esc.invoice.line:0
119469msgid "International Invoices Liness"
119470msgstr "Lignes de Factures Internationales"
119471
119472#. module: account_hq_entries
119473#: code:addons/account_hq_entries/wizard/esc_lines_import.py:111
119474#: model:ir.actions.report.xml,name:account_hq_entries.esc_line_import_rejected
119475#, python-format
119476msgid "International Invoices Rejected Lines"
119477msgstr "Lignes Internationales Rejetées"
119478
119479#. module: account_hq_entries
119480#: field:finance_price.track_changes,esc_invoice_line_id:0
119481msgid "International Line"
119482msgstr "Ligne Internationale"
119483
119484#. module: account_hq_entries
119485#: selection:finance_price.track_changes,matching_type:0
119486msgid "International Lines"
119487msgstr "Lignes Internationales"
119488
119489#. module: account_hq_entries
119490#: view:esc.line.import:0
119491msgid "Keep import results and close the window"
119492msgstr "Garder les résultats de l'import et fermer la fenêtre."
119493
119494#. module: account_hq_entries
119495#: view:finance_price.track_changes:0
119496#: model:ir.actions.act_window,name:account_hq_entries.finance_price_track_changes_action
119497#: model:ir.ui.menu,name:account_hq_entries.finance_price_track_changes_menu
119498msgid "Line Matching"
119499msgstr "Correspondance des lignes"
119500
119501#. module: account_hq_entries
119502#: code:addons/account_hq_entries/wizard/esc_lines_import.py:312
119503#, python-format
119504msgid "Line duplicated in the system"
119505msgstr "Ligne dupliquée dans le système"
119506
119507#. module: account_hq_entries
119508#: model:ir.actions.act_window,name:account_hq_entries.esc_line_to_finance_price_tc
119509msgid "Matching"
119510msgstr "Correspondance"
119511
119512#. module: account_hq_entries
119513#: code:addons/account_hq_entries/report/finance_cost_price.py:76
119514#: field:finance_price.track_changes,matching_type:0
119515#, python-format
119516msgid "Matching Type"
119517msgstr "Type de correspondance"
119518
119519#. module: account_hq_entries
119520#: field:finance_price.track_changes,stock_move_id:0
119521msgid "Move line"
119522msgstr "Mouvement"
119523
119524#. module: account_hq_entries
119525#: code:addons/account_hq_entries/report/finance_cost_price.py:71
119526#: field:finance_price.track_changes,new_price:0
119527#, python-format
119528msgid "New Finance Price"
119529msgstr "Nouveau Prix Finance"
119530
119531#. module: product
119532#: selection:product.mass.update,type_of_ed_bn:0
119533msgid "No BN/No ED"
119534msgstr "Pas NL/Pas DE"
119535
119536#. module: account_hq_entries
119537#: view:esc.invoice.line:0
119538msgid "Not Done"
119539msgstr "Non clôturé"
119540
119541#. module: account_hq_entries
119542#: code:addons/account_hq_entries/report/finance_cost_price.py:70
119543#, python-format
119544msgid "Old Finance Price"
119545msgstr "Ancien Prix Finance"
119546
119547#. module: account_hq_entries
119548#: code:addons/account_hq_entries/wizard/esc_lines_import.py:197
119549#, python-format
119550msgid "Order ref %s does not match the PO pattern"
119551msgstr "La Réf. de Commande %s ne correspond pas au format d'un BdC"
119552
119553#. module: account_hq_entries
119554#: code:addons/account_hq_entries/wizard/esc_lines_import.py:192
119555#, python-format
119556msgid "Order ref is mandatory"
119557msgstr "Réf. de Commande obligatoire."
119558
119559#. module: account_hq_entries
119560#: field:finance_price.track_changes,purchase_oder_line_id:0
119561msgid "PO line"
119562msgstr "Ligne BdC"
119563
119564#. module: product
119565#: code:addons/product/wizard/product_mass_update.py:426
119566#, python-format
119567msgid "Please limit your query to a maximum of 500 products."
119568msgstr "Veuillez restreindre la recherche à un maximum de 500 produits."
119569
119570#. module: account_hq_entries
119571#: field:finance_price.track_changes,old_price:0
119572msgid "Previous Finance Price"
119573msgstr "Précédent Prix Finance"
119574
119575#. module: account_hq_entries
119576#: code:addons/account_hq_entries/wizard/esc_lines_import.py:234
119577#, python-format
119578msgid "Product Code %s not found."
119579msgstr "Code Produit %s non trouvé."
119580
119581#. module: account_hq_entries
119582#: code:addons/account_hq_entries/wizard/esc_lines_import.py:227
119583#, python-format
119584msgid "Product Code is mandatory."
119585msgstr "Code Produit obligatoire."
119586
119587#. module: account_hq_entries
119588#: code:addons/account_hq_entries/wizard/esc_lines_import.py:247
119589#, python-format
119590msgid "Product Quantity %s cannot be 0 or negative"
119591msgstr "La Quantité %s ne peut pas être 0 ou négative"
119592
119593#. module: account_hq_entries
119594#: code:addons/account_hq_entries/wizard/esc_lines_import.py:243
119595#, python-format
119596msgid "Product Quantity %s is not a number."
119597msgstr "La Quantité %s n'est pas un nombre."
119598
119599#. module: account_hq_entries
119600#: code:addons/account_hq_entries/wizard/esc_lines_import.py:238
119601#, python-format
119602msgid "Product quantity is mandatory."
119603msgstr "La Quantité est obligatoire."
119604
119605#. module: product
119606#: field:product.mass.update,not_activated_product_ids:0
119607#: field:product.mass.update,not_deactivated_product_ids:0
119608msgid "Product(s) that can not be deactivated"
119609msgstr "Produit(s) qui ne peuvent pas être désativé(s)"
119610
119611#. module: account_hq_entries
119612#: field:finance_price.track_changes,stock_before:0
119613msgid "Qty in Stock Before"
119614msgstr "Qté en stock avant"
119615
119616#. module: account_hq_entries
119617#: field:finance_price.track_changes,qty_processed:0
119618msgid "Quantity Processed"
119619msgstr "Quantité Traitée"
119620
119621#. module: account_hq_entries
119622#: sql_constraint:esc.invoice.line:0
119623msgid "Quantity must be greater than 0."
119624msgstr "La Quantité doit être supérieure à 0."
119625
119626#. module: account_hq_entries
119627#: model:ir.model,name:account_hq_entries.model_esc_line_import_rejected
119628msgid "Rejected Lines"
119629msgstr "Lignes Rejetées"
119630
119631#. module: account_hq_entries
119632#: field:esc.invoice.line,remaining_qty:0
119633msgid "Remaining Quantity"
119634msgstr "Quantié Restante"
119635
119636#. module: account_hq_entries
119637#: field:esc.invoice.line,requestor_cc_id:0
119638msgid "Requestor Cost Center"
119639msgstr "Centre de Coût du Demandeur"
119640
119641#. module: account_hq_entries
119642#: code:addons/account_hq_entries/wizard/esc_lines_import.py:206
119643#, python-format
119644msgid "Requestor Cost Center %s not found or does not match any active instance."
119645msgstr "Centre de Coût du demandeur %s non trouvé ou ne correspondant pas à une instance active."
119646
119647#. module: account_hq_entries
119648#: code:addons/account_hq_entries/wizard/esc_lines_import.py:201
119649#, python-format
119650msgid "Requestor Cost Center is mandatory"
119651msgstr "Le Centre de Coût du demandeur est obligatoire"
119652
119653#. module: account_hq_entries
119654#: view:esc.line.import:0
119655msgid "Reset import and close the window"
119656msgstr "Mise à zéro de l'import et fermeture de la fenêtre"
119657
119658#. module: account_hq_entries
119659#: code:addons/account_hq_entries/report/finance_cost_price.py:73
119660#, python-format
119661msgid "Stock Level Before"
119662msgstr "Niveau de Stock Avant"
119663
119664#. module: account_hq_entries
119665#: view:esc.line.import:0
119666msgid "This will import lines from a SpreadSheet xml file."
119667msgstr "Imported des lines depuis un fichier au format Feuille de Calcul XML 2003"
119668
119669#. module: account_hq_entries
119670#: model:ir.actions.report.xml,name:account_hq_entries.report_finance_cost_price
119671msgid "Track Changes Finance Price"
119672msgstr "Suivi des changements du Prix Finance"
119673
119674#. module: account_hq_entries
119675#: code:addons/account_hq_entries/wizard/esc_lines_import.py:256
119676#, python-format
119677msgid "Unit Price %s is not a number."
119678msgstr "Prix Unitaire %s n'est pas un nombre."
119679
119680#. module: account_hq_entries
119681#: code:addons/account_hq_entries/wizard/esc_lines_import.py:251
119682#, python-format
119683msgid "Unit Price is mandatory."
119684msgstr "Le Prix Unitaire est obligatoire"
119685
119686#. module: account_hq_entries
119687#: code:addons/account_hq_entries/wizard/esc_lines_import.py:188
119688#, python-format
119689msgid "a row must have 8 columns"
119690msgstr "une ligne doit avoir 8 colonnes"
119691
119692#. module: account_hq_entries
119693#: code:addons/account_hq_entries/wizard/esc_lines_import.py:310
119694#, python-format
119695msgid "duplicates line %d"
119696msgstr "ligne dupliquée %d"
119697>>>>>>> MERGE-SOURCE
119227119698
=== modified file 'bin/addons/msf_profile/msf_profile.py'
--- bin/addons/msf_profile/msf_profile.py 2023-05-03 10:23:38 +0000
+++ bin/addons/msf_profile/msf_profile.py 2023-05-05 12:01:38 +0000
@@ -57,6 +57,7 @@
57 'model': lambda *a: 'patch.scripts',57 'model': lambda *a: 'patch.scripts',
58 }58 }
5959
60<<<<<<< TREE
60 # UF29.061 # UF29.0
61 def us_11177_bn_for_kcl_items(self, cr, uid, *a, **b):62 def us_11177_bn_for_kcl_items(self, cr, uid, *a, **b):
62 '''63 '''
@@ -198,6 +199,16 @@
198 cr.execute("update ir_translation set name='account.analytic.account,nameko' where name='account.analytic.account,name' and type='model'")199 cr.execute("update ir_translation set name='account.analytic.account,nameko' where name='account.analytic.account,name' and type='model'")
199 return True200 return True
200201
202=======
203 # UF29.0
204 def us_10835_disable_iil_menu(self, cr, uid, *a, **b):
205 # hide menuitems
206 setup_obj = self.pool.get('esc_line.setup')
207 esc_line_install = setup_obj.create(cr, uid, {})
208 setup_obj.execute(cr, uid, [esc_line_install])
209
210
211>>>>>>> MERGE-SOURCE
201 # UF28.0212 # UF28.0
202 def us_10885_tc_entries(self, cr, uid, *a, **b):213 def us_10885_tc_entries(self, cr, uid, *a, **b):
203 current_instance = self.pool.get('res.users').browse(cr, uid, uid).company_id.instance_id214 current_instance = self.pool.get('res.users').browse(cr, uid, uid).company_id.instance_id
204215
=== modified file 'bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv'
--- bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv 2023-02-17 14:02:08 +0000
+++ bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv 2023-05-05 12:01:38 +0000
@@ -6,7 +6,7 @@
6msf_sync_data_server.fo_updates_po_ref,TRUE,TRUE,"['name','state','client_order_ref']","['&', '&','&','&', ('claim_name_goods_return', '=', False), ('partner_type','!=','external'),('client_order_ref','!=',False),('split_type_sale_order','=','original_sale_order'),'!',('client_order_ref', 'like', 'invalid_by_recovery')]",partner_id,MISSION,purchase.order.update_fo_ref,sale.order,FO updates PO ref,9,,Valid6msf_sync_data_server.fo_updates_po_ref,TRUE,TRUE,"['name','state','client_order_ref']","['&', '&','&','&', ('claim_name_goods_return', '=', False), ('partner_type','!=','external'),('client_order_ref','!=',False),('split_type_sale_order','=','original_sale_order'),'!',('client_order_ref', 'like', 'invalid_by_recovery')]",partner_id,MISSION,purchase.order.update_fo_ref,sale.order,FO updates PO ref,9,,Valid
7msf_sync_data_server.update_in_ref,TRUE,TRUE,"['name','shipment_ref']","['&','&', ('partner_type_stock_picking', 'not in', ['esc', 'external']),('shipment_ref','!=',False),'!',('shipment_ref', 'like', 'invalid_by_recovery')]",partner_id,MISSION,stock.picking.update_in_ref,stock.picking,IN updates ref to OUT SHIP,10,,Valid7msf_sync_data_server.update_in_ref,TRUE,TRUE,"['name','shipment_ref']","['&','&', ('partner_type_stock_picking', 'not in', ['esc', 'external']),('shipment_ref','!=',False),'!',('shipment_ref', 'like', 'invalid_by_recovery')]",partner_id,MISSION,stock.picking.update_in_ref,stock.picking,IN updates ref to OUT SHIP,10,,Valid
8msf_sync_data_server.pol_create_sol,TRUE,TRUE,"['sync_local_id', 'order_id/name','product_id/id', 'product_id/name', 'name', 'state', 'product_qty', 'product_uom', 'price_unit', 'analytic_distribution_id/id','comment','have_analytic_distribution_from_header','line_number', 'nomen_manda_0/id','nomen_manda_1/id','nomen_manda_2/id','nomen_manda_3/id', 'nomenclature_description','notes','default_name','default_code','is_line_split','date_planned', 'stock_take_date', 'ir_name_for_sync', 'original_instance']","[('sync_linked_sol', '=', False), ('order_id.partner_type', 'not in',['external','esc']), ('state', 'in', ['validated', 'confirmed', 'done']), ('order_id.state', 'not in', ['draft', 'draft_p', 'cancel']), ('from_synchro_return_goods', '=', False), ('order_id.active', '=', 't')]",partner_id,MISSION,sale.order.line.create_so_line,purchase.order.line,PO line creates FO line,11,,Valid8msf_sync_data_server.pol_create_sol,TRUE,TRUE,"['sync_local_id', 'order_id/name','product_id/id', 'product_id/name', 'name', 'state', 'product_qty', 'product_uom', 'price_unit', 'analytic_distribution_id/id','comment','have_analytic_distribution_from_header','line_number', 'nomen_manda_0/id','nomen_manda_1/id','nomen_manda_2/id','nomen_manda_3/id', 'nomenclature_description','notes','default_name','default_code','is_line_split','date_planned', 'stock_take_date', 'ir_name_for_sync', 'original_instance']","[('sync_linked_sol', '=', False), ('order_id.partner_type', 'not in',['external','esc']), ('state', 'in', ['validated', 'confirmed', 'done']), ('order_id.state', 'not in', ['draft', 'draft_p', 'cancel']), ('from_synchro_return_goods', '=', False), ('order_id.active', '=', 't')]",partner_id,MISSION,sale.order.line.create_so_line,purchase.order.line,PO line creates FO line,11,,Valid
9msf_sync_data_server.sol_updates_pol,TRUE,TRUE,"['resourced_original_line/id', 'resourced_original_remote_line','sync_sourced_origin', 'sync_local_id', 'sync_linked_pol', 'order_id/name', 'product_id/id', 'product_id/name', 'name', 'state','product_uom_qty', 'product_uom', 'price_unit', 'in_name_goods_return', 'analytic_distribution_id/id','comment','have_analytic_distribution_from_header','line_number', 'nomen_manda_0/id','nomen_manda_1/id','nomen_manda_2/id','nomen_manda_3/id', 'nomenclature_description','notes','default_name','default_code','date_planned','is_line_split', 'original_line_id/id', 'confirmed_delivery_date', 'stock_take_date', 'cancel_split_ok', 'modification_comment', 'from_cancel_out', 'pol_external_ref', 'dpo_line_id/.id', 'dpo_id/.id', 'sync_pushed_from_po', 'esti_dd']","[('order_id.partner_type', '!=', 'external'), ('order_id.active', '=', 't'), ('state', '!=', 'draft'), ('order_id.procurement_request', '=', False), ('product_uom_qty', '!=', 0.0), '!', '&', ('order_id.fo_created_by_po_sync', '=', False), ('order_id.state', '=', 'draft')]",partner_id,MISSION,purchase.order.line.sol_update_original_pol,sale.order.line,FO line updates PO line,12,"[('order_id.procurement_request', '=', False), ('order_id.active', '=', 't'), ('order_id.state', 'in', ['draft', 'draft_p']), ('order_id.partner_type', 'not in', ['external', 'esc']), ('order_id.client_order_ref', '=', False)]",Valid9msf_sync_data_server.sol_updates_pol,TRUE,TRUE,"['resourced_original_line/id', 'resourced_original_remote_line','sync_sourced_origin', 'sync_local_id', 'sync_linked_pol', 'order_id/name', 'product_id/id', 'product_id/name', 'name', 'state','product_uom_qty', 'product_uom', 'price_unit', 'in_name_goods_return', 'analytic_distribution_id/id','comment','have_analytic_distribution_from_header','line_number', 'nomen_manda_0/id','nomen_manda_1/id','nomen_manda_2/id','nomen_manda_3/id', 'nomenclature_description','notes','default_name','default_code','date_planned','is_line_split', 'original_line_id/id', 'confirmed_delivery_date', 'stock_take_date', 'cancel_split_ok', 'modification_comment', 'from_cancel_out', 'pol_external_ref', 'dpo_line_id/.id', 'dpo_id/.id', 'dpo_id/partner_type', 'sync_pushed_from_po', 'esti_dd']","[('order_id.partner_type', '!=', 'external'), ('order_id.active', '=', 't'), ('state', '!=', 'draft'), ('order_id.procurement_request', '=', False), ('product_uom_qty', '!=', 0.0), '!', '&', ('order_id.fo_created_by_po_sync', '=', False), ('order_id.state', '=', 'draft')]",partner_id,MISSION,purchase.order.line.sol_update_original_pol,sale.order.line,FO line updates PO line,12,"[('order_id.procurement_request', '=', False), ('order_id.active', '=', 't'), ('order_id.state', 'in', ['draft', 'draft_p']), ('order_id.partner_type', 'not in', ['external', 'esc']), ('order_id.client_order_ref', '=', False)]",Valid
10msf_sync_data_server.pol_update_date_expected,TRUE,TRUE,"['sync_local_id', 'sync_linked_pol']","[('id', '=', 0)]",partner_id,MISSION,purchase.order.line.update_date_expected,sale.order.line,Update IN expected date,55,,Valid10msf_sync_data_server.pol_update_date_expected,TRUE,TRUE,"['sync_local_id', 'sync_linked_pol']","[('id', '=', 0)]",partner_id,MISSION,purchase.order.line.update_date_expected,sale.order.line,Update IN expected date,55,,Valid
11msf_sync_data_server.partial_shipped_coordo_updates_in_at_project,TRUE,TRUE,"['name', 'previous_step_id/name', 'state', 'origin', 'partner_type_stock_picking', 'shipment_id/name', 'min_date', 'note', 'claim', 'packing_list', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_id/default_code', 'move_lines/product_qty', 'move_lines/prodlot_id/id','move_lines/prodlot_id/name','move_lines/prodlot_id/life_date', 'move_lines/prodlot_id/type', 'move_lines/prodlot_id/comment', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/usage', 'move_lines/comment', 'move_lines/sale_line_id/id', 'move_lines/sale_line_id/in_name_goods_return', 'move_lines/sale_line_id/resourced_original_remote_line', 'move_lines/from_pack', 'move_lines/to_pack', 'move_lines/weight', 'move_lines/height', 'move_lines/length', 'move_lines/width', 'sale_id/claim_name_goods_return', 'sale_id/client_order_ref']","['&','&','&','&','&',('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'), ('subtype', 'in', ['standard', 'packing']), ('state', 'in', ['done', 'delivered']), ('already_shipped', '=', True), ('do_not_sync', '=', False)]",partner_id,MISSION,stock.picking.partial_shipped_fo_updates_in_po,stock.picking,Partial shipped at Coordo updates IN at Project,19,,Valid11msf_sync_data_server.partial_shipped_coordo_updates_in_at_project,TRUE,TRUE,"['name', 'previous_step_id/name', 'state', 'origin', 'partner_type_stock_picking', 'shipment_id/name', 'min_date', 'note', 'claim', 'packing_list', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_id/default_code', 'move_lines/product_qty', 'move_lines/prodlot_id/id','move_lines/prodlot_id/name','move_lines/prodlot_id/life_date', 'move_lines/prodlot_id/type', 'move_lines/prodlot_id/comment', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/usage', 'move_lines/comment', 'move_lines/sale_line_id/id', 'move_lines/sale_line_id/in_name_goods_return', 'move_lines/sale_line_id/resourced_original_remote_line', 'move_lines/from_pack', 'move_lines/to_pack', 'move_lines/weight', 'move_lines/height', 'move_lines/length', 'move_lines/width', 'sale_id/claim_name_goods_return', 'sale_id/client_order_ref']","['&','&','&','&','&',('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'), ('subtype', 'in', ['standard', 'packing']), ('state', 'in', ['done', 'delivered']), ('already_shipped', '=', True), ('do_not_sync', '=', False)]",partner_id,MISSION,stock.picking.partial_shipped_fo_updates_in_po,stock.picking,Partial shipped at Coordo updates IN at Project,19,,Valid
12msf_sync_data_server.moves_from_dpo_closed_coordo_updates_in_at_project,TRUE,TRUE,"['name', 'state', 'origin', 'subtype', 'partner_type_stock_picking', 'shipment_id/name', 'min_date', 'note', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_id/default_code', 'move_lines/product_qty', 'move_lines/prodlot_id/id','move_lines/prodlot_id/name','move_lines/prodlot_id/life_date', 'move_lines/prodlot_id/type', 'move_lines/prodlot_id/comment', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/dpo_line_id', 'move_lines/comment']","['&', '&', '&', '&', ('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'), ('subtype', 'in', ['picking', 'standard']), ('dpo_out', '=', True), ('new_dpo_out', '=', False)]",partner_id,MISSION,stock.picking.partial_shippped_dpo_updates_in_po,stock.picking,Moves from DPO closed at Coordo updates IN at Project,20,,Valid12msf_sync_data_server.moves_from_dpo_closed_coordo_updates_in_at_project,TRUE,TRUE,"['name', 'state', 'origin', 'subtype', 'partner_type_stock_picking', 'shipment_id/name', 'min_date', 'note', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_id/default_code', 'move_lines/product_qty', 'move_lines/prodlot_id/id','move_lines/prodlot_id/name','move_lines/prodlot_id/life_date', 'move_lines/prodlot_id/type', 'move_lines/prodlot_id/comment', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/dpo_line_id', 'move_lines/comment']","['&', '&', '&', '&', ('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'), ('subtype', 'in', ['picking', 'standard']), ('dpo_out', '=', True), ('new_dpo_out', '=', False)]",partner_id,MISSION,stock.picking.partial_shippped_dpo_updates_in_po,stock.picking,Moves from DPO closed at Coordo updates IN at Project,20,,Valid
1313
=== modified file 'bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv'
--- bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv 2023-03-08 09:08:44 +0000
+++ bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv 2023-05-05 12:01:38 +0000
@@ -187,3 +187,5 @@
187msf_sync_data_server.stock_mission_report_line_location_remote,TRUE,TRUE,TRUE,TRUE,bidirectional,Up,"[('location_id.usage', '=', 'internal')]","['location_name', 'product_id/id', 'quantity', 'last_mod_date', 'instance_id/id', 'uom_id/id']",MISSION,stock.mission.report.line.location,,Remote Stock Level,Valid,,1030187msf_sync_data_server.stock_mission_report_line_location_remote,TRUE,TRUE,TRUE,TRUE,bidirectional,Up,"[('location_id.usage', '=', 'internal')]","['location_name', 'product_id/id', 'quantity', 'last_mod_date', 'instance_id/id', 'uom_id/id']",MISSION,stock.mission.report.line.location,,Remote Stock Level,Valid,,1030
188msf_sync_data_server.account_mcdb,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,"[('description', '!=', False), ('synced', '=', True), ('hq_template', '=', True)]","['abs_id/id', 'account_ids/id', 'account_type_ids/id', 'amount_book_from', 'amount_book_to', 'amount_from', 'amount_func_from', 'amount_func_to', 'amount_to', 'analytic_account_cc_ids/id', 'analytic_account_dest_ids/id', 'analytic_account_f1_ids/id', 'analytic_account_f2_ids/id', 'analytic_account_fp_ids/id', 'analytic_axis', 'analytic_journal_ids/id', 'booking_currency_id/id', 'cheque_number', 'copied_id/id', 'currency_choice', 'currency_id/id', 'description', 'display_account', 'display_analytic_account', 'display_analytic_journal', 'display_analytic_period', 'display_cost_center', 'display_destination', 'display_employee', 'display_free1', 'display_free2', 'display_funding_pool', 'display_in_output_currency/id', 'display_instance', 'display_journal', 'display_mcdb_load_button', 'display_partner', 'display_period', 'display_top_prop_instance', 'display_transfer_journal', 'display_type', 'document_code', 'document_date_from', 'document_date_to', 'document_state', 'employee_id/id', 'employee_ids/id', 'fiscalyear_id/id', 'functional_currency_id/id', 'fx_table_id/id', 'instance_ids/id', 'journal_ids/id', 'model', 'name', 'open_items/id', 'partner_id/id', 'partner_ids/id', 'partner_txt', 'period_ids/id', 'posting_date_from', 'posting_date_to', 'reallocated', 'reconciled', 'reconcile_date', 'reconcile_id/id', 'ref', 'rev_account_ids', 'rev_account_type_ids', 'rev_analytic_account_cc_ids', 'rev_analytic_account_dest_ids', 'rev_analytic_account_f1_ids', 'rev_analytic_account_f2_ids', 'rev_analytic_account_fp_ids', 'rev_analytic_journal_ids', 'rev_employee_ids', 'reversed', 'rev_instance_ids', 'rev_journal_ids', 'rev_partner_ids', 'rev_period_ids', 'rev_top_prop_instance_ids', 'rev_transfer_journal_ids', 'top_prop_instance_ids/id', 'transfer_journal_id/id', 'transfer_journal_ids/id', 'hq_template', 'include_related_entries', 'excl_inactive_journal_ids', 'inactive_at']",HQ + MISSION,account.mcdb,,Selector,Valid,,1040188msf_sync_data_server.account_mcdb,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,"[('description', '!=', False), ('synced', '=', True), ('hq_template', '=', True)]","['abs_id/id', 'account_ids/id', 'account_type_ids/id', 'amount_book_from', 'amount_book_to', 'amount_from', 'amount_func_from', 'amount_func_to', 'amount_to', 'analytic_account_cc_ids/id', 'analytic_account_dest_ids/id', 'analytic_account_f1_ids/id', 'analytic_account_f2_ids/id', 'analytic_account_fp_ids/id', 'analytic_axis', 'analytic_journal_ids/id', 'booking_currency_id/id', 'cheque_number', 'copied_id/id', 'currency_choice', 'currency_id/id', 'description', 'display_account', 'display_analytic_account', 'display_analytic_journal', 'display_analytic_period', 'display_cost_center', 'display_destination', 'display_employee', 'display_free1', 'display_free2', 'display_funding_pool', 'display_in_output_currency/id', 'display_instance', 'display_journal', 'display_mcdb_load_button', 'display_partner', 'display_period', 'display_top_prop_instance', 'display_transfer_journal', 'display_type', 'document_code', 'document_date_from', 'document_date_to', 'document_state', 'employee_id/id', 'employee_ids/id', 'fiscalyear_id/id', 'functional_currency_id/id', 'fx_table_id/id', 'instance_ids/id', 'journal_ids/id', 'model', 'name', 'open_items/id', 'partner_id/id', 'partner_ids/id', 'partner_txt', 'period_ids/id', 'posting_date_from', 'posting_date_to', 'reallocated', 'reconciled', 'reconcile_date', 'reconcile_id/id', 'ref', 'rev_account_ids', 'rev_account_type_ids', 'rev_analytic_account_cc_ids', 'rev_analytic_account_dest_ids', 'rev_analytic_account_f1_ids', 'rev_analytic_account_f2_ids', 'rev_analytic_account_fp_ids', 'rev_analytic_journal_ids', 'rev_employee_ids', 'reversed', 'rev_instance_ids', 'rev_journal_ids', 'rev_partner_ids', 'rev_period_ids', 'rev_top_prop_instance_ids', 'rev_transfer_journal_ids', 'top_prop_instance_ids/id', 'transfer_journal_id/id', 'transfer_journal_ids/id', 'hq_template', 'include_related_entries', 'excl_inactive_journal_ids', 'inactive_at']",HQ + MISSION,account.mcdb,,Selector,Valid,,1040
189msf_sync_data_server.finance_report_template,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,"[('synced', '=', True), ('hq_template', '=', True)]","['last_modification', 'name', 'sync_values', 'wizard_name', 'hq_template']",HQ + MISSION,wizard.template,,Finance Report Templates,Valid,,1050189msf_sync_data_server.finance_report_template,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,"[('synced', '=', True), ('hq_template', '=', True)]","['last_modification', 'name', 'sync_values', 'wizard_name', 'hq_template']",HQ + MISSION,wizard.template,,Finance Report Templates,Valid,,1050
190msf_sync_data_server.iil_down,TRUE,TRUE,FALSE,FALSE,bidirectional,Single-Private,"[('state', '=', '1_draft')]","['po_name', 'requestor_cc_id/id', 'consignee_cc_id/id', 'product_id/id', 'price_unit', 'product_qty', 'uom_id/id', 'currency_id/id', 'shipment_ref', 'dest_instance_id/id']",HQ + MISSION,esc.invoice.line,dest_instance_id,Down ESC Invoices Lines,Valid,,1300
191msf_sync_data_server.iil_up,TRUE,TRUE,FALSE,FALSE,bidirectional,Single-Private,"[('state', '=', 'done')]","['state', 'remaining_qty', 'dest_instance_id/id']",HQ + MISSION,esc.invoice.line,dest_instance_id,UP ESC Invoices Lines state,Valid,,1305
190192
=== modified file 'bin/addons/product/product.py'
--- bin/addons/product/product.py 2023-03-15 13:17:31 +0000
+++ bin/addons/product/product.py 2023-05-05 12:01:38 +0000
@@ -314,6 +314,14 @@
314 res[obj.id] = list_price314 res[obj.id] = list_price
315 return res315 return res
316316
317 def _get_finance_price_currency_id(self, cr, uid, ids, fields, arg, context=None):
318 ret = {}
319 cur_id = self.pool.get('res.users').get_company_currency_id(cr, uid)
320
321 for _id in ids:
322 ret[_id] = cur_id
323 return ret
324
317 _columns = {325 _columns = {
318 'name': fields.char('Name', size=128, required=True, translate=True, select=True),326 'name': fields.char('Name', size=128, required=True, translate=True, select=True),
319 'product_manager': fields.many2one('res.users','Product Manager',help="This is use as task responsible"),327 'product_manager': fields.many2one('res.users','Product Manager',help="This is use as task responsible"),
@@ -328,6 +336,8 @@
328 'rental': fields.boolean('Can be Rent'),336 'rental': fields.boolean('Can be Rent'),
329 'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),337 'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),
330 'standard_price': fields.float('Cost Price', required=True, digits_compute=dp.get_precision('Account Computation'), help="Price of product calculated according to the selected costing method."),338 'standard_price': fields.float('Cost Price', required=True, digits_compute=dp.get_precision('Account Computation'), help="Price of product calculated according to the selected costing method."),
339 'finance_price': fields.float('Finance Cost Price', readonly=1, digits_compute=dp.get_precision('Account Computation')),
340 'finance_price_currency_id': fields.function(_get_finance_price_currency_id, 'Finance CP Currency', method=True, type='many2one', relation='res.currency'),
331 'list_price': fields.function(_get_list_price, method=True, type='float', string='Sale Price', digits_compute=dp.get_precision('Sale Price Computation'), help="Base price for computing the customer price. Sometimes called the catalog price.",341 'list_price': fields.function(_get_list_price, method=True, type='float', string='Sale Price', digits_compute=dp.get_precision('Sale Price Computation'), help="Base price for computing the customer price. Sometimes called the catalog price.",
332 store = {342 store = {
333 'product.template': (lambda self, cr, uid, ids, c=None: ids, ['standard_price'], 10),343 'product.template': (lambda self, cr, uid, ids, c=None: ids, ['standard_price'], 10),
334344
=== modified file 'bin/addons/product_attributes/product_attributes.py'
--- bin/addons/product_attributes/product_attributes.py 2023-04-26 14:14:45 +0000
+++ bin/addons/product_attributes/product_attributes.py 2023-05-05 12:01:38 +0000
@@ -1168,6 +1168,12 @@
1168 field.set('invisible', '0')1168 field.set('invisible', '0')
1169 res['arch'] = etree.tostring(root)1169 res['arch'] = etree.tostring(root)
11701170
1171 if view_type == 'form' and self.pool.get('unifield.setup.configuration').get_config(cr, uid, 'esc_line'):
1172 root = etree.fromstring(res['arch'])
1173 for field in root.xpath('//field[@name="finance_price"]|//field[@name="finance_price_currency_id"]'):
1174 field.set('invisible', '0')
1175 res['arch'] = etree.tostring(root)
1176
1171 if view_type == 'search' and context.get('available_for_restriction'):1177 if view_type == 'search' and context.get('available_for_restriction'):
1172 context.update({'search_default_not_restricted': 1})1178 context.update({'search_default_not_restricted': 1})
1173 root = etree.fromstring(res['arch'])1179 root = etree.fromstring(res['arch'])
11741180
=== modified file 'bin/addons/product_attributes/product_attributes_view.xml'
--- bin/addons/product_attributes/product_attributes_view.xml 2023-04-26 14:14:45 +0000
+++ bin/addons/product_attributes/product_attributes_view.xml 2023-05-05 12:01:38 +0000
@@ -94,6 +94,8 @@
94 <field name="currency_id" nolabel="1" />94 <field name="currency_id" nolabel="1" />
95 <field name="list_price" colspan="2"/>95 <field name="list_price" colspan="2"/>
96 <field name="field_currency_id" nolabel="1" />96 <field name="field_currency_id" nolabel="1" />
97 <field name="finance_price" colspan="2" invisible="1" />
98 <field name="finance_price_currency_id" nolabel="1" invisible="1" />
97 <newline/>99 <newline/>
98 </group>100 </group>
99101
100102
=== modified file 'bin/addons/purchase/purchase_order_line.py'
--- bin/addons/purchase/purchase_order_line.py 2023-02-09 11:14:39 +0000
+++ bin/addons/purchase/purchase_order_line.py 2023-05-05 12:01:38 +0000
@@ -666,6 +666,7 @@
666 'max_qty_cancellable': fields.function(_in_qty_remaining, type='float', string='Total PO qty - already processed + assign qty + confirm qty', method=1, multi='in_remain'),666 'max_qty_cancellable': fields.function(_in_qty_remaining, type='float', string='Total PO qty - already processed + assign qty + confirm qty', method=1, multi='in_remain'),
667 'from_dpo_line_id': fields.integer('DPO line id on the remote', internal=1),667 'from_dpo_line_id': fields.integer('DPO line id on the remote', internal=1),
668 'from_dpo_id': fields.integer('DPO id on the remote', internal=1),668 'from_dpo_id': fields.integer('DPO id on the remote', internal=1),
669 'from_dpo_esc': fields.boolean('Line sourced to ESC DPO', internal=1),
669 'dates_modified': fields.boolean('EDD/CDD modified on validated line', internal=1),670 'dates_modified': fields.boolean('EDD/CDD modified on validated line', internal=1),
670 'loan_line_id': fields.many2one('sale.order.line', string='Linked loan line', readonly=True),671 'loan_line_id': fields.many2one('sale.order.line', string='Linked loan line', readonly=True),
671672
672673
=== modified file 'bin/addons/stock/stock_move.py'
--- bin/addons/stock/stock_move.py 2023-02-10 11:14:12 +0000
+++ bin/addons/stock/stock_move.py 2023-05-05 12:01:38 +0000
@@ -38,8 +38,14 @@
3838
39 def name_get(self, cr, uid, ids, context=None):39 def name_get(self, cr, uid, ids, context=None):
40 res = []40 res = []
41 for line in self.browse(cr, uid, ids, context=context):41 if context is None:
42 res.append((line.id, (line.product_id.code or '/')+': '+line.location_id.name+' > '+line.location_dest_id.name))42 context = {}
43 for line in self.browse(cr, uid, ids, fields_to_fetch=['product_id', 'line_number', 'location_id', 'location_dest_id'], context=context):
44 if context.get('display_move_line'):
45 prefix = '#%s %s' % (line.line_number, line.product_id.code or '/')
46 else:
47 prefix = line.product_id.code or '/'
48 res.append((line.id, '%s: %s > %s' % (prefix, line.location_id.name, line.location_dest_id.name)))
43 return res49 return res
4450
45 def _get_picking_ids(self, cr, uid, ids, context=None):51 def _get_picking_ids(self, cr, uid, ids, context=None):
4652
=== modified file 'bin/addons/sync_client/update.py'
--- bin/addons/sync_client/update.py 2023-01-31 10:36:54 +0000
+++ bin/addons/sync_client/update.py 2023-05-05 12:01:38 +0000
@@ -209,7 +209,12 @@
209 return 0209 return 0
210 domain.append(('id', 'in', ids_need_to_push))210 domain.append(('id', 'in', ids_need_to_push))
211211
212 ids_to_compute = self.search_ext(cr, uid, domain, context=context)212 order = None
213 if hasattr(self, '_sync_order'):
214 # keep same id order at HQ and lower level
215 order = self._sync_order
216
217 ids_to_compute = self.search_ext(cr, uid, domain, order=order, context=context)
213 if not ids_to_compute:218 if not ids_to_compute:
214 return 0219 return 0
215220
216221
=== modified file 'bin/addons/sync_common/common.py'
--- bin/addons/sync_common/common.py 2022-09-22 12:45:25 +0000
+++ bin/addons/sync_common/common.py 2023-05-05 12:01:38 +0000
@@ -45,6 +45,7 @@
45 'cost.center.distribution.line',45 'cost.center.distribution.line',
46 'country.export.mapping',46 'country.export.mapping',
47 'distribution.line',47 'distribution.line',
48 'esc.invoice.line',
48 'financing.contract.contract',49 'financing.contract.contract',
49 'financing.contract.donor',50 'financing.contract.donor',
50 'financing.contract.format',51 'financing.contract.format',
5152
=== modified file 'bin/addons/sync_server/rules.py'
--- bin/addons/sync_server/rules.py 2017-10-12 08:16:17 +0000
+++ bin/addons/sync_server/rules.py 2023-05-05 12:01:38 +0000
@@ -120,6 +120,7 @@
120 ('down', 'Down'),120 ('down', 'Down'),
121 ('bidirectional', 'Bidirectional'),121 ('bidirectional', 'Bidirectional'),
122 ('bi-private', 'Bidirectional-Private'),122 ('bi-private', 'Bidirectional-Private'),
123 ('single-private', 'Single-Private'),
123 ], 'Directionality', required = True,),124 ], 'Directionality', required = True,),
124 'domain':fields.text('Domain', required = False),125 'domain':fields.text('Domain', required = False),
125 'owner_field':fields.char('Owner Field', size = 64, required = False),126 'owner_field':fields.char('Owner Field', size = 64, required = False),
@@ -459,7 +460,8 @@
459 return (message, error)460 return (message, error)
460461
461 def check_owner_field(self, cr, uid, rec, context=None):462 def check_owner_field(self, cr, uid, rec, context=None):
462 if rec.direction != 'bi-private': return ('', False)463 if rec.direction not in ('bi-private', 'single-private'):
464 return ('', False)
463 error = False465 error = False
464 message = "* Owner field existence... "466 message = "* Owner field existence... "
465 try:467 try:
@@ -517,6 +519,10 @@
517 error = err or error519 error = err or error
518 message.append(mess)520 message.append(mess)
519521
522 if rec.direction == 'single-private' and rec.can_delete:
523 error = True
524 message.append('Single-Private and Can delete not implemented')
525
520 message.append("* Sequence is unique... ")526 message.append("* Sequence is unique... ")
521 if self.search(cr, uid,527 if self.search(cr, uid,
522 [('sequence_number','=',rec.sequence_number)],528 [('sequence_number','=',rec.sequence_number)],
523529
=== modified file 'bin/addons/sync_server/rules_view.xml'
--- bin/addons/sync_server/rules_view.xml 2017-11-14 10:57:04 +0000
+++ bin/addons/sync_server/rules_view.xml 2023-05-05 12:01:38 +0000
@@ -92,7 +92,7 @@
92 <field name="can_delete" />92 <field name="can_delete" />
93 <field name="handle_priority"/>93 <field name="handle_priority"/>
94 <field name="direction" on_change="invalidate(model_ref)" string="Direction"/>94 <field name="direction" on_change="invalidate(model_ref)" string="Direction"/>
95 <field name="owner_field" on_change="invalidate(model_ref)" attrs="{'invisible':[('direction','!=','bi-private')], 'required':[('direction','=','bi-private')]}" colspan="4"/>95 <field name="owner_field" on_change="invalidate(model_ref)" attrs="{'invisible':[('direction','not int',['bi-private', 'single-private'])], 'required':[('direction','in',['bi-private', 'single-private'])]}" colspan="4"/>
96 <field name="master_data" />96 <field name="master_data" />
97 </group>97 </group>
98 <group col="2">98 <group col="2">
9999
=== modified file 'bin/addons/sync_server/sync_server.py'
--- bin/addons/sync_server/sync_server.py 2022-07-22 12:54:50 +0000
+++ bin/addons/sync_server/sync_server.py 2023-05-05 12:01:38 +0000
@@ -1097,6 +1097,9 @@
1097 to_retrieve.append(x)1097 to_retrieve.append(x)
1098 else:1098 else:
1099 to_retrieve = list_to_retrieve1099 to_retrieve = list_to_retrieve
1100 elif rules[update.rule_id.id]['direction'] == 'single-private':
1101 if update.owner:
1102 to_retrieve.append(update.owner.id)
11001103
1101 puller_ids = [y.entity_id.id for y in update.puller_ids]1104 puller_ids = [y.entity_id.id for y in update.puller_ids]
1102 not_pulled = []1105 not_pulled = []
11031106
=== modified file 'bin/addons/sync_server/update.py'
--- bin/addons/sync_server/update.py 2021-02-01 16:59:12 +0000
+++ bin/addons/sync_server/update.py 2023-05-05 12:01:38 +0000
@@ -454,6 +454,8 @@
454 else:454 else:
455 privates = self.pool.get('sync.server.entity')._get_ancestor(cr, uid, update.owner.id, context=context) + \455 privates = self.pool.get('sync.server.entity')._get_ancestor(cr, uid, update.owner.id, context=context) + \
456 [update.owner.id]456 [update.owner.id]
457 elif update.rule_id.direction == 'single-private' and update.owner:
458 privates = [update.owner.id]
457 else:459 else:
458 privates = []460 privates = []
459 if (update.rule_id.direction == 'up' and update.source.id in children) or \461 if (update.rule_id.direction == 'up' and update.source.id in children) or \
@@ -530,6 +532,7 @@
530 if recover:532 if recover:
531 filters.append("source = %s" % (entity.id, ))533 filters.append("source = %s" % (entity.id, ))
532 filters.append("direction = 'bi-private' AND (is_deleted = 't' OR owner IN (" + (','.join(map(str, children + [entity.id]))) + "))")534 filters.append("direction = 'bi-private' AND (is_deleted = 't' OR owner IN (" + (','.join(map(str, children + [entity.id]))) + "))")
535 filters.append("direction = 'single-private' AND owner = %d " % (entity.id,))
533 base_query += ' AND ((' + ') OR ('.join(filters) + '))'536 base_query += ' AND ((' + ') OR ('.join(filters) + '))'
534537
535 ## Recover add own client updates to the list538 ## Recover add own client updates to the list
536539
=== modified file 'bin/addons/sync_so/purchase.py'
--- bin/addons/sync_so/purchase.py 2023-02-17 13:56:40 +0000
+++ bin/addons/sync_so/purchase.py 2023-05-05 12:01:38 +0000
@@ -144,6 +144,7 @@
144 pol_values['modification_comment'] = sol_dict.get('modification_comment', False)144 pol_values['modification_comment'] = sol_dict.get('modification_comment', False)
145 pol_values['from_dpo_line_id'] = sol_dict.get('dpo_line_id') and sol_dict.get('dpo_line_id', {}).get('.id', False) or False145 pol_values['from_dpo_line_id'] = sol_dict.get('dpo_line_id') and sol_dict.get('dpo_line_id', {}).get('.id', False) or False
146 pol_values['from_dpo_id'] = sol_dict.get('dpo_id') and sol_dict.get('dpo_id', {}).get('.id', False) or False146 pol_values['from_dpo_id'] = sol_dict.get('dpo_id') and sol_dict.get('dpo_id', {}).get('.id', False) or False
147 pol_values['from_dpo_esc'] = sol_dict.get('dpo_id') and sol_dict.get('dpo_id', {}).get('partner_type', False) == 'esc' or False
147 pol_values['esti_dd'] = sol_dict.get('esti_dd', False)148 pol_values['esti_dd'] = sol_dict.get('esti_dd', False)
148 if 'line_number' in pol_values:149 if 'line_number' in pol_values:
149 del(pol_values['line_number'])150 del(pol_values['line_number'])
150151
=== modified file 'bin/addons/unifield_setup/setup_configuration.py'
--- bin/addons/unifield_setup/setup_configuration.py 2022-09-19 08:45:17 +0000
+++ bin/addons/unifield_setup/setup_configuration.py 2023-05-05 12:01:38 +0000
@@ -62,6 +62,7 @@
62 'previous_fy_dates_allowed': fields.boolean(string='Does the system allow document dates on previous Fiscal Year?'),62 'previous_fy_dates_allowed': fields.boolean(string='Does the system allow document dates on previous Fiscal Year?'),
63 'customer_commitment': fields.boolean(string='Does the system allow Customer Commitment Vouchers ?'),63 'customer_commitment': fields.boolean(string='Does the system allow Customer Commitment Vouchers ?'),
64 'signature': fields.boolean(string='Activate Electronic Validation ?'),64 'signature': fields.boolean(string='Activate Electronic Validation ?'),
65 'esc_line': fields.boolean(string='Activate International Invoices Lines ?'),
65 }66 }
6667
67 _defaults = {68 _defaults = {
@@ -79,6 +80,7 @@
79 'previous_fy_dates_allowed': lambda *a: False,80 'previous_fy_dates_allowed': lambda *a: False,
80 'customer_commitment': False,81 'customer_commitment': False,
81 'signature': False,82 'signature': False,
83 'esc_line': False,
82 }84 }
8385
84 _constraints = [86 _constraints = [

Subscribers

People subscribed via source and target branches