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

Proposed by jftempo
Status: Merged
Merged at revision: 6394
Proposed branch: lp:~jfb-tempo-consulting/unifield-server/US-9495
Merge into: lp:unifield-server
Diff against target: 291 lines (+93/-35) (has conflicts)
11 files modified
bin/addons/msf_profile/i18n/fr_MF.po (+28/-1)
bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv (+1/-1)
bin/addons/purchase/purchase_order_line.py (+15/-0)
bin/addons/purchase/purchase_workflow.py (+1/-0)
bin/addons/sale/sale_order.py (+3/-1)
bin/addons/sale/sale_workflow.py (+1/-0)
bin/addons/sale/wizard/split_order_line.py (+1/-0)
bin/addons/sourcing/res_partner.py (+20/-20)
bin/addons/sourcing/sale_order_line.py (+21/-11)
bin/addons/sourcing/sourcing_view.xml (+1/-1)
bin/addons/sync_so/sale.py (+1/-0)
Text conflict in bin/addons/msf_profile/i18n/fr_MF.po
To merge this branch: bzr merge lp:~jfb-tempo-consulting/unifield-server/US-9495
Reviewer Review Type Date Requested Status
UniField Reviewer Team Pending
Review via email: mp+435435@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/addons/msf_profile/i18n/fr_MF.po'
2--- bin/addons/msf_profile/i18n/fr_MF.po 2022-12-30 12:38:06 +0000
3+++ bin/addons/msf_profile/i18n/fr_MF.po 2023-01-10 08:45:42 +0000
4@@ -116921,8 +116921,9 @@
5 msgid "No signature defined in user's profile"
6 msgstr "Aucun signature dans le profil de l'utilisateur"
7
8-#. module: purchase
9+#. module: purchase, sale
10 #: field:purchase.order,nb_creation_message_nr:0
11+#: field:sale.order,nb_creation_message_nr:0
12 msgid "Number of NR creation messages"
13 msgstr "Nombre de messages NR"
14
15@@ -117897,6 +117898,7 @@
16 #, python-format
17 msgid "Both EoY Revaluation have been done in %s"
18 msgstr "Les deux réévaluations de fin d'année ont déjà été faite dans %s"
19+<<<<<<< TREE
20
21 #. module: account
22 #: code:addons/account/wizard/account_invoice_import.py:251
23@@ -117959,3 +117961,28 @@
24 #, python-format
25 msgid "Active column is missing or empty at line %d"
26 msgstr "Valeur manquante ou vide dans la colonne statut à la ligne %d"
27+=======
28+
29+#. module: purchase
30+#: view:purchase.order:0
31+msgid "Activate Role"
32+msgstr "Activer le rôle"
33+
34+#. module: purchase
35+#: view:purchase.order:0
36+msgid "De-active Role"
37+msgstr "Désactiver le rôle"
38+
39+#. modules: purchase, sale
40+#: field:purchase.order.line,original_instance:0
41+#: field:sale.order.line,original_instance:0
42+msgid "Original Instance"
43+msgstr "Instance originale"
44+
45+#. module: sourcing
46+#: code:addons/sourcing/sale_order_line.py:1239
47+#, python-format
48+msgid "You cannot re-sync a line more than 2 times"
49+msgstr "Vous ne pouvez pas faire plus de 2 re-sync"
50+
51+>>>>>>> MERGE-SOURCE
52
53=== modified file 'bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv'
54--- bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv 2022-02-15 14:49:57 +0000
55+++ bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv 2023-01-10 08:45:42 +0000
56@@ -5,7 +5,7 @@
57 msf_sync_data_server.po_updates_so_ref,TRUE,TRUE,"['name','state','partner_ref']","['&','&','&',('partner_type','!=','external'),('state','in',['validated', 'validated_p', 'sourced', 'sourced_p', 'confirmed', 'confirmed_p']),('partner_ref','!=',False),'!',('partner_ref', 'like', 'invalid_by_recovery')]",partner_id,MISSION,sale.order.update_sub_so_ref,purchase.order,PO updates SO ref,8,,Valid
58 msf_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
59 msf_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
60-msf_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']","[('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
61+msf_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
62 msf_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)]",Valid
63 msf_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
64 msf_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
65
66=== modified file 'bin/addons/purchase/purchase_order_line.py'
67--- bin/addons/purchase/purchase_order_line.py 2022-11-21 10:10:25 +0000
68+++ bin/addons/purchase/purchase_order_line.py 2023-01-10 08:45:42 +0000
69@@ -165,9 +165,22 @@
70
71 res = {}
72 for pol in self.browse(cr, uid, ids, fields_to_fetch=['linked_sol_id'], context=context):
73+ if not pol.linked_sol_id:
74+ original_instance = self.pool.get('res.company')._get_instance_record(cr, uid).instance
75+ elif pol.linked_sol_id.original_instance:
76+ original_instance = pol.linked_sol_id.original_instance
77+ elif pol.linked_sol_id.order_id.partner_type in ('esc', 'external'):
78+ # FO FS to Ext
79+ original_instance = self.pool.get('res.company')._get_instance_record(cr, uid).instance
80+ else:
81+ # IR or FO from scratch to instance
82+ original_instance = pol.linked_sol_id.order_id.partner_id.name
83+
84+
85 res[pol.id] = {
86 'customer_ref': pol.linked_sol_id and pol.linked_sol_id.order_id.client_order_ref or False,
87 'ir_name_for_sync': pol.linked_sol_id and pol.linked_sol_id.order_id.name or '',
88+ 'original_instance': original_instance,
89 }
90
91 return res
92@@ -656,6 +669,8 @@
93 'from_dpo_id': fields.integer('DPO id on the remote', internal=1),
94 'dates_modified': fields.boolean('EDD/CDD modified on validated line', internal=1),
95 'loan_line_id': fields.many2one('sale.order.line', string='Linked loan line', readonly=True),
96+
97+ 'original_instance': fields.function(_get_customer_ref, method=True, type='char', string='Original Instance', multi='custo_ref_ir_name'),
98 }
99
100 _defaults = {
101
102=== modified file 'bin/addons/purchase/purchase_workflow.py'
103--- bin/addons/purchase/purchase_workflow.py 2022-10-31 15:42:23 +0000
104+++ bin/addons/purchase/purchase_workflow.py 2023-01-10 08:45:42 +0000
105@@ -75,6 +75,7 @@
106 if split_po.linked_sol_id:
107 sol_values['line_number'] = split_po.linked_sol_id.line_number
108 sol_values['original_line_id'] = split_po.linked_sol_id.id
109+ sol_values['original_instance'] = split_po.linked_sol_id.original_instance
110 return sol_values
111
112
113
114=== modified file 'bin/addons/sale/sale_order.py'
115--- bin/addons/sale/sale_order.py 2022-11-21 10:10:25 +0000
116+++ bin/addons/sale/sale_order.py 2023-01-10 08:45:42 +0000
117@@ -2292,6 +2292,8 @@
118 'instance_sync_order_ref': fields.many2one('sync.order.label', string='Order in sync. instance'),
119 'cv_line_ids': fields.one2many('account.commitment.line', 'so_line_id', string="Commitment Voucher Lines"),
120 'loan_line_id': fields.many2one('purchase.order.line', string='Linked loan line', readonly=True),
121+
122+ 'original_instance': fields.char('Original Instance', size=128, readonly=1),
123 }
124 _order = 'sequence, id desc'
125 _defaults = {
126@@ -2502,7 +2504,7 @@
127 'modification_comment', 'original_product', 'original_qty', 'original_price',
128 'original_uom', 'sync_linked_pol', 'resourced_original_line', 'ir_name_from_sync',
129 'in_name_goods_return', 'counterpart_po_line_id', 'from_cancel_out',
130- 'instance_sync_order_ref', 'sync_sourced_origin'
131+ 'instance_sync_order_ref', 'sync_sourced_origin', 'original_instance',
132 ]:
133 if x not in default:
134 default[x] = False
135
136=== modified file 'bin/addons/sale/sale_workflow.py'
137--- bin/addons/sale/sale_workflow.py 2022-05-10 14:16:17 +0000
138+++ bin/addons/sale/sale_workflow.py 2023-01-10 08:45:42 +0000
139@@ -189,6 +189,7 @@
140 'analytic_distribution_id': sol.analytic_distribution_id.id or False,
141 'ir_name_from_sync': sol.ir_name_from_sync or False,
142 'sync_sourced_origin': sol.sync_sourced_origin,
143+ 'original_instance': sol.original_instance,
144 }
145 new_sol_id = self.copy(cr, uid, sol.id, sol_vals, context=context)
146 wf_service.trg_validate(uid, 'sale.order.line', new_sol_id, 'validated', cr)
147
148=== modified file 'bin/addons/sale/wizard/split_order_line.py'
149--- bin/addons/sale/wizard/split_order_line.py 2020-09-24 14:13:46 +0000
150+++ bin/addons/sale/wizard/split_order_line.py 2023-01-10 08:45:42 +0000
151@@ -84,6 +84,7 @@
152 'in_name_goods_return': split.sale_line_id.in_name_goods_return,
153 'ir_name_from_sync': split.sale_line_id.ir_name_from_sync,
154 'counterpart_po_line_id': split.sale_line_id.counterpart_po_line_id and split.sale_line_id.counterpart_po_line_id.id or False,
155+ 'original_instance': split.sale_line_id.original_instance,
156 }
157 # following new sequencing policy, we check if resequencing occur (behavior 1).
158 # if not (behavior 2), the split line keeps the same line number as original line
159
160=== modified file 'bin/addons/sourcing/res_partner.py'
161--- bin/addons/sourcing/res_partner.py 2020-11-05 09:39:35 +0000
162+++ bin/addons/sourcing/res_partner.py 2023-01-10 08:45:42 +0000
163@@ -72,6 +72,24 @@
164 result[l_id] = True
165 return result
166
167+ def _get_source_domain(self, cr, uid, sol_ids, context=None):
168+ if isinstance(sol_ids, (int, long)):
169+ sol_ids = [sol_ids]
170+
171+ remove_ids = set()
172+ allowed_types_set = set(['external', 'esc', 'internal', 'section', 'intermission'])
173+
174+ for sol in self.pool.get('sale.order.line').browse(cr, uid, sol_ids, fields_to_fetch=['order_id', 'original_instance']):
175+ remove_ids.add(sol.order_id.partner_id.id)
176+ if not sol.order_id.procurement_request:
177+ types_allowed = ['external', 'esc']
178+ if sol.order_id.partner_type in ['esc', 'external']:
179+ types_allowed.extend(['internal', 'section', 'intermission'])
180+ elif not sol.original_instance or sol.original_instance == sol.order_id.partner_id.name:
181+ types_allowed.extend(['internal', 'section', 'intermission'])
182+ allowed_types_set.intersection_update(set(types_allowed))
183+ return [('id', 'not in', list(remove_ids)), ('partner_type', 'in', list(allowed_types_set))]
184+
185 def _check_partner_type(self, cr, uid, obj, name, args, context=None):
186 if context is None:
187 context = {}
188@@ -86,15 +104,7 @@
189 if arg[1] != '=' or not isinstance(arg[2], (int, long)):
190 raise osv.except_osv(_('Error'), _('Filter check_partner different than (arg[0], =, id) not implemented.'))
191 if arg[2]:
192- so = self.pool.get('sale.order').browse(cr, uid, arg[2], fields_to_fetch=['partner_id', 'procurement_request', 'partner_type'])
193- newargs.append(('id', '!=', so.partner_id.id))
194- if not so.procurement_request:
195- types_allowed = ['external', 'esc']
196- if so.partner_type not in ['internal', 'section', 'intermission']:
197- types_allowed.extend(['internal', 'section', 'intermission'])
198- elif so.partner_type == 'internal':
199- types_allowed.extend(['section', 'intermission'])
200- newargs.append(('partner_type', 'in', types_allowed))
201+ newargs += self._get_source_domain(cr, uid, arg[2], context=context)
202 else:
203 newargs.append(args)
204 return newargs
205@@ -182,17 +192,7 @@
206 for arg in args:
207 if arg[0] == 'line_contains_fo':
208 if type(arg[2]) == type(list()):
209- for line in self.pool.get('sale.order.line').browse(cr, uid, arg[2][0][2], fields_to_fetch=['partner_id', 'order_id'], context=context):
210- res.append(('id', '!=', line.partner_id.id))
211- if not line.order_id.procurement_request:
212- types_allowed = ['external', 'esc']
213- if line.partner_id.partner_type not in ['internal', 'section', 'intermission']:
214- types_allowed.extend(['internal', 'section', 'intermission'])
215- elif line.partner_id.partner_type == 'internal':
216- types_allowed.extend(['section', 'intermission'])
217-
218- res.append(('partner_type', 'in', types_allowed))
219-
220+ res += self._get_source_domain(cr, uid, arg[2][0][2], context=context)
221 return res
222
223 _columns = {
224
225=== modified file 'bin/addons/sourcing/sale_order_line.py'
226--- bin/addons/sourcing/sale_order_line.py 2022-10-28 10:41:43 +0000
227+++ bin/addons/sourcing/sale_order_line.py 2023-01-10 08:45:42 +0000
228@@ -1217,17 +1217,27 @@
229 _('You cannot confirm the sourcing of a line with unit price as zero.'),
230 )
231
232- int_int_supplier = self.search(cr, uid, [
233- ('id', 'in', ids),
234- ('supplier.partner_type', '=', 'internal'),
235- ('order_id.partner_type', '=', 'internal'),
236- ('order_id.procurement_request', '=', False),
237- ], count=True, context=context)
238- if int_int_supplier:
239- raise osv.except_osv(
240- _('Warning'),
241- _('You cannot confirm the sourcing of a line to an internal customer with an internal supplier.'),
242- )
243+ if ids:
244+ cr.execute('''
245+ select
246+ count(*)
247+ from
248+ sale_order_line sol, sale_order so, res_partner p, res_partner supplier
249+ where
250+ sol.order_id = so.id and
251+ p.id = so.partner_id and
252+ supplier.id = sol.supplier and
253+ p.partner_type in ('section', 'internal', 'intermission') and
254+ supplier.partner_type in ('section', 'internal', 'intermission') and
255+ coalesce(sol.original_instance, p.name) != p.name and
256+ sol.id in %s
257+ ''', (tuple(ids), ))
258+
259+ if cr.fetchone()[0]:
260+ raise osv.except_osv(
261+ _('Warning'),
262+ _('You cannot re-sync a line more than 2 times')
263+ )
264
265 self.source_line(cr, uid, ids, context=context)
266
267
268=== modified file 'bin/addons/sourcing/sourcing_view.xml'
269--- bin/addons/sourcing/sourcing_view.xml 2020-09-28 08:39:21 +0000
270+++ bin/addons/sourcing/sourcing_view.xml 2023-01-10 08:45:42 +0000
271@@ -69,7 +69,7 @@
272 <field name="stock_uom_id" readonly="1" string="UoM Stock" />
273 <field name="company_id" invisible="1" />
274 <field name="supplier" colspan="2"
275- domain="[('id', '!=', company_id), ('available_for_dpo', '=', po_cft),('check_partner', '=', order_id), '|', '|', ('supplier', '=', 't'), ('manufacturer', '=', 't'), ('transporter', '=', 't')]"
276+ domain="[('id', '!=', company_id), ('available_for_dpo', '=', po_cft),('check_partner', '=', active_id), '|', '|', ('supplier', '=', 't'), ('manufacturer', '=', 't'), ('transporter', '=', 't')]"
277 context="{'product_id': product_id, 'choose_supplier': True, 'uom': product_uom, 'product_qty': product_uom_qty}"
278 attrs="{'readonly': ['|', '|', ('po_cft', '=', 'cft'), ('state', '!=', 'validated'), ('type', '=', 'make_to_stock')]}"
279 on_change="onChangeSupplier(supplier, type)" />
280
281=== modified file 'bin/addons/sync_so/sale.py'
282--- bin/addons/sync_so/sale.py 2021-08-09 17:27:06 +0000
283+++ bin/addons/sync_so/sale.py 2023-01-10 08:45:42 +0000
284@@ -66,6 +66,7 @@
285 sol_values['order_id'] = sale_order_ids[0]
286 sol_values['sync_linked_pol'] = pol_dict.get('sync_local_id', False)
287 sol_values['ir_name_from_sync'] = pol_dict.get('ir_name_for_sync', False)
288+ sol_values['original_instance'] = pol_dict.get('original_instance', False)
289 if line_info.product_id and not sol_values.get('product_id'):
290 raise Exception('FO: %s , Product %s not found' % (so_name, line_info.default_code or ''))
291 if sol_values.get('product_id'):

Subscribers

People subscribed via source and target branches