Merge lp:~jfb-tempo-consulting/unifield-server/US-5563 into lp:unifield-server
- US-5563
- Merge into trunk
Proposed by
jftempo
Status: | Merged |
---|---|
Merged at revision: | 5455 |
Proposed branch: | lp:~jfb-tempo-consulting/unifield-server/US-5563 |
Merge into: | lp:unifield-server |
Diff against target: |
308 lines (+93/-22) 10 files modified
bin/addons/delivery_mechanism/delivery_mechanism.py (+2/-2) 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 (+1/-1) bin/addons/purchase/purchase_workflow.py (+13/-1) bin/addons/return_claim/return_claim.py (+25/-13) bin/addons/sale/sale_order.py (+3/-2) bin/addons/sale/wizard/split_order_line.py (+1/-0) bin/addons/stock/stock.py (+26/-0) bin/addons/stock_override/stock.py (+1/-1) bin/addons/sync_so/purchase.py (+20/-1) |
To merge this branch: | bzr merge lp:~jfb-tempo-consulting/unifield-server/US-5563 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
UniField Reviewer Team | Pending | ||
Review via email: mp+368956@code.launchpad.net |
Commit message
Description of the change
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/delivery_mechanism/delivery_mechanism.py' |
2 | --- bin/addons/delivery_mechanism/delivery_mechanism.py 2019-04-02 15:41:38 +0000 |
3 | +++ bin/addons/delivery_mechanism/delivery_mechanism.py 2019-08-07 12:45:48 +0000 |
4 | @@ -1355,7 +1355,7 @@ |
5 | # Cancel missing IN instead of processing |
6 | if wizard.register_a_claim and wizard.claim_type == 'missing': |
7 | move_ids = move_obj.search(cr, uid, [('picking_id', '=', backorder_id)]) |
8 | - move_obj.action_cancel(cr, uid, move_ids, context=context) |
9 | + move_obj.write(cr, uid, move_ids, {'purchase_line_id': False, 'state': 'cancel'}) |
10 | self.action_cancel(cr, uid, [backorder_id], context=context) |
11 | else: |
12 | wf_service.trg_validate(uid, 'stock.picking', backorder_id, 'button_confirm', cr) |
13 | @@ -1409,7 +1409,7 @@ |
14 | # Cancel missing IN instead of processing |
15 | if wizard.register_a_claim and wizard.claim_type == 'missing': |
16 | move_ids = move_obj.search(cr, uid, [('picking_id', '=', picking_id)]) |
17 | - move_obj.action_cancel(cr, uid, move_ids, context=context) |
18 | + move_obj.write(cr, uid, move_ids, {'purchase_line_id': False, 'state': 'cancel'}) |
19 | self.action_cancel(cr, uid, [picking_id], context=context) |
20 | else: |
21 | if wizard.register_a_claim and wizard.claim_type in ('return', 'surplus'): |
22 | |
23 | === modified file 'bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv' |
24 | --- bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv 2019-07-25 14:58:06 +0000 |
25 | +++ bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv 2019-08-07 12:45:48 +0000 |
26 | @@ -12,7 +12,7 @@ |
27 | msf_sync_data_server.dpo_service_lines_update_in_at_project,FALSE,TRUE,"['order_id/name', 'order_id/delivery_confirmed_date', 'sync_local_id', 'origin', 'confirmed_delivery_date', 'name', 'product_uom/id', 'product_uom/name', 'link_sol_id/line_number', 'notes', 'product_qty', 'product_id/name', 'product_id/id', 'product_id/default_code', 'comment']","[('dest_partner_id.partner_type', '=', 'internal'), ('order_id.order_type', '=', 'direct'), ('order_id.state', 'in', ['approved', 'done']), ('product_id.type', 'in', ['service', 'service_recep'])]",dest_partner_id,MISSION,purchase.order.line.confirmed_dpo_service_lines_update_in_po,purchase.order.line,DPO service lines update IN at Project,21,,Valid |
28 | msf_sync_data_server.closed_in_validates_delivery_out_ship,TRUE,TRUE,"['name', 'state', 'shipment_ref']","['&','&','&','&','&',('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'in'),('subtype', 'in', ['standard']), ('state', '=', 'done'), ('shipment_ref', '!=', False), ('dpo_incoming', '=', False)]",partner_id,MISSION,stock.picking.closed_in_validates_delivery_out_ship,stock.picking,Closed IN validates delivery of OUT-SHIP,26,,Valid |
29 | msf_sync_data_server.closed_in_confirms_dpo_reception,TRUE,TRUE,"['name', 'state', 'dpo_line_id']","['&','&','&','&',('picking_id.partner_type_stock_picking', '!=', 'external'), ('picking_id.type', '=', 'in'), ('picking_id.subtype', 'in', ['standard']), ('state', '=', 'done'), ('dpo_line_id', '!=', 0)]",partner_id,MISSION,stock.picking.closed_in_confirms_dpo_reception,stock.move,Closed IN confirms DPO reception,27,,Valid |
30 | -msf_sync_data_server.validated_claim_create_claim,TRUE,TRUE,"['category_return_claim', 'creation_date_return_claim', 'description_return_claim', 'follow_up_return_claim', 'name', 'picking_id_return_claim/shipment_ref', 'po_id_return_claim/name', 'po_so_return_claim', 'goods_expected', 'processor_origin', 'state', 'type_return_claim', 'origin_claim', 'event_ids_return_claim/name', 'event_ids_return_claim/creation_date_claim_event', 'event_ids_return_claim/from_picking_wizard_claim_event', 'event_ids_return_claim/replacement_picking_expected_claim_event', 'event_ids_return_claim/type_claim_event', 'event_ids_return_claim/description_claim_event', 'product_line_ids_return_claim/price_unit_claim_product_line', 'product_line_ids_return_claim/qty_claim_product_line', 'product_line_ids_return_claim/product_id_claim_product_line/id', 'product_line_ids_return_claim/product_id_claim_product_line/name', 'product_line_ids_return_claim/price_currency_claim_product_line/id', 'product_line_ids_return_claim/price_currency_claim_product_line/name', 'product_line_ids_return_claim/uom_id_claim_product_line/id', 'product_line_ids_return_claim/uom_id_claim_product_line/name', 'product_line_ids_return_claim/type_check', 'product_line_ids_return_claim/expiry_date_claim_product_line']","[('state', '=', 'in_progress'), ('partner_id_return_claim.partner_type', 'in', ['internal', 'intermission', 'intersection']), ('type_return_claim', '=', 'supplier'), ('old_version', '=', False)]",partner_id_return_claim,MISSION,return.claim.validated_claim_create_claim,return.claim,Validated Claim creates Claim,28,,Valid |
31 | +msf_sync_data_server.validated_claim_create_claim,TRUE,TRUE,"['category_return_claim', 'creation_date_return_claim', 'description_return_claim', 'follow_up_return_claim', 'name', 'picking_id_return_claim/shipment_ref', 'po_id_return_claim/name', 'po_so_return_claim', 'goods_expected', 'processor_origin', 'state', 'type_return_claim', 'origin_claim', 'event_ids_return_claim/name', 'event_ids_return_claim/creation_date_claim_event', 'event_ids_return_claim/from_picking_wizard_claim_event', 'event_ids_return_claim/replacement_picking_expected_claim_event', 'event_ids_return_claim/type_claim_event', 'event_ids_return_claim/description_claim_event', 'product_line_ids_return_claim/price_unit_claim_product_line', 'product_line_ids_return_claim/qty_claim_product_line', 'product_line_ids_return_claim/product_id_claim_product_line/id', 'product_line_ids_return_claim/product_id_claim_product_line/name', 'product_line_ids_return_claim/price_currency_claim_product_line/id', 'product_line_ids_return_claim/price_currency_claim_product_line/name', 'product_line_ids_return_claim/uom_id_claim_product_line/id', 'product_line_ids_return_claim/uom_id_claim_product_line/name', 'product_line_ids_return_claim/type_check', 'product_line_ids_return_claim/expiry_date_claim_product_line', 'product_line_ids_return_claim/lot_id_claim_product_line/id', 'product_line_ids_return_claim/lot_id_claim_product_line/name']","[('state', '=', 'in_progress'), ('partner_id_return_claim.partner_type', 'in', ['internal', 'intermission', 'intersection']), ('type_return_claim', '=', 'supplier'), ('old_version', '=', False)]",partner_id_return_claim,MISSION,return.claim.validated_claim_create_claim,return.claim,Validated Claim creates Claim,28,,Valid |
32 | msf_sync_data_server.origin_claim_close_claim,TRUE,TRUE,"['name', 'state', 'partner_id_return_claim/name', 'partner_id_return_claim/partner_type']","[('state', '=', 'done'), ('partner_id_return_claim.partner_type', '=', 'internal'), ('type_return_claim', '=', 'supplier'), ('old_version', '=', False)]",partner_id_return_claim,MISSION,return.claim.origin_claim_close_claim,return.claim,Original Closed Claim close counterpart Claim,29,,Valid |
33 | msf_sync_data_server.goods_expecting_picking_from_claim_creates_fo,TRUE,TRUE,"['name', 'claim_name', 'purchase_id/name', 'purchase_id/delivery_requested_date','purchase_id/details', 'purchase_id/notes', 'purchase_id/categ', 'purchase_id/order_type', 'purchase_id/priority', 'purchase_id/loan_duration', 'purchase_id/analytic_distribution_id/id', 'purchase_id/is_a_counterpart', 'purchase_id/pricelist_id/name', 'purchase_id/stock_take_date', 'move_lines/product_id/name', 'move_lines/purchase_line_id/id', 'move_lines/purchase_line_id/sync_local_id', 'move_lines/name', 'move_lines/comment', 'move_lines/product_qty', 'move_lines/product_uom/name', 'move_lines/price_unit', 'move_lines/line_number']","['&', '&', ('state', '=', 'assigned'), ('partner_id.partner_type', '=', 'internal'), ('claim', '=', True), ('claim_name', '!=', False), '|', ('name', 'like', 'replacement'), ('name', 'like', 'missing')]",partner_id,MISSION,stock.picking.goods_expecting_picking_from_claim_creates_fo,stock.picking,IN-replacement/-missing created by Claim creates FO,30,,Valid |
34 | msf_sync_data_server.create_account_invoice,TRUE,TRUE,"['number', 'document_date', 'date_invoice', 'journal_id/type', 'name', 'origin', 'from_supply', 'state', 'currency_id/name', 'invoice_line/name', 'invoice_line/quantity', 'invoice_line/uos_id/name', 'invoice_line/price_unit', 'invoice_line/discount', 'invoice_line/account_id/code', 'invoice_line/product_id/id', 'invoice_line/product_id/default_code']","[('type', '=', 'out_invoice'), ('is_debit_note', '=', False), ('state', '!=', 'draft'), ('number', '!=', False), ('synced', '=', True), ('partner_type', 'in', ('intermission', 'section'))]",partner_id,MISSION,account.invoice.create_invoice_from_sync,account.invoice,Account Invoice Creation,40,,Valid |
35 | |
36 | === modified file 'bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv' |
37 | --- bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv 2019-06-12 13:01:06 +0000 |
38 | +++ bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv 2019-08-07 12:45:48 +0000 |
39 | @@ -247,7 +247,7 @@ |
40 | msf_usb_sync_data_server.bi_other_monthly_review_consumption_line,TRUE,TRUE,FALSE,TRUE,bidirectional,Bidirectional,[],"['fmc', 'fmc2', 'last_reviewed', 'last_reviewed2', 'mrc_creation_date', 'mrc_id/id', 'name/id', 'ref', 'text_error', 'valid_ok', 'valid_until']",USB,monthly.review.consumption.line,,[OTHER] Monthly Review Consumption Line,Valid,,4011 |
41 | msf_usb_sync_data_server.bi_other_claim_return,TRUE,TRUE,FALSE,TRUE,bidirectional,Bidirectional,[],"['category_return_claim', 'creation_date_return_claim', 'default_src_location_id_return_claim/id', 'description_return_claim', 'follow_up_return_claim', 'name', 'order_line_number_return_claim', 'partner_id_return_claim/id', 'picking_id_return_claim/id', 'po_id_return_claim/id', 'po_so_return_claim', 'so_id_return_claim/id', 'state', 'type_return_claim']",USB,return.claim,,[OTHER] Claim Return,Valid,,4020 |
42 | msf_usb_sync_data_server.bi_other_claim_event,TRUE,TRUE,FALSE,TRUE,bidirectional,Bidirectional,[],"['creation_date_claim_event', 'description_claim_event', 'event_picking_id_claim_event/id', 'from_picking_wizard_claim_event', 'name', 'order_claim_event', 'replacement_picking_expected_claim_event', 'return_claim_id_claim_event/id', 'state', 'type_claim_event']",USB,claim.event,,[OTHER] Claim Event,Valid,,4021 |
43 | -msf_usb_sync_data_server.bi_other_claim_product_line,TRUE,TRUE,FALSE,TRUE,bidirectional,Bidirectional,[],"['asset_id_claim_product_line/id', 'claim_id_claim_product_line/id', 'composition_list_id_claim_product_line/id', 'expiry_date_claim_product_line', 'integrity_status_claim_product_line', 'lot_id_claim_product_line/id', 'name', 'product_id_claim_product_line/id', 'qty_claim_product_line', 'src_location_id_claim_product_line/id', 'stock_move_id_claim_product_line/id', 'type_check', 'uom_id_claim_product_line/id']",USB,claim.product.line,,[OTHER] Claim Product Line,Valid,,4022 |
44 | +msf_usb_sync_data_server.bi_other_claim_product_line,TRUE,TRUE,FALSE,TRUE,bidirectional,Bidirectional,[],"['asset_id_claim_product_line/id', 'claim_id_claim_product_line/id', 'composition_list_id_claim_product_line/id', 'expiry_date_claim_product_line', 'integrity_status_claim_product_line', 'lot_id_claim_product_line/id', 'lot_id_claim_product_line/name', 'name', 'product_id_claim_product_line/id', 'qty_claim_product_line', 'src_location_id_claim_product_line/id', 'stock_move_id_claim_product_line/id', 'type_check', 'uom_id_claim_product_line/id']",USB,claim.product.line,,[OTHER] Claim Product Line,Valid,,4022 |
45 | msf_usb_sync_data_server.bi_other_composition_kit,TRUE,TRUE,FALSE,TRUE,bidirectional,Bidirectional,"[('composition_type','=','real')]","['active', 'composition_batch_check', 'composition_creation_date', 'composition_description', 'composition_expiry_check', 'composition_kit_creation_id/id', 'composition_lot_id/id', 'composition_product_id/id', 'composition_ref_exp', 'composition_type', 'composition_version_txt', 'state', 'composition_reference']",USB,composition.kit,,[OTHER] Composition Kit,Valid,,4029 |
46 | msf_usb_sync_data_server.bi_other_composition_kit_tree,TRUE,TRUE,FALSE,TRUE,bidirectional,Bidirectional,"[('composition_type','=','real')]",['composition_version_id/id'],USB,composition.kit,,[OTHER] Composition Kit Tree,Valid,,4030 |
47 | msf_usb_sync_data_server.bi_other_composition_item,TRUE,TRUE,FALSE,TRUE,bidirectional,Bidirectional,"[('item_kit_id' , 'in' , ('composition.kit' , 'id' , [('composition_type','=','real')]))]","['item_asset_id/id', 'item_description', 'item_exp', 'item_kit_id/id', 'item_lot', 'item_module', 'item_product_id/id', 'item_qty', 'item_stock_move_id/id', 'item_uom_id/id', 'state', 'text_error', 'to_correct_ok']",USB,composition.item,,[OTHER] Composition Item,Valid,,4031 |
48 | |
49 | === modified file 'bin/addons/purchase/purchase_workflow.py' |
50 | --- bin/addons/purchase/purchase_workflow.py 2019-07-02 13:44:01 +0000 |
51 | +++ bin/addons/purchase/purchase_workflow.py 2019-08-07 12:45:48 +0000 |
52 | @@ -90,7 +90,7 @@ |
53 | |
54 | return True |
55 | |
56 | - def update_fo_lines(self, cr, uid, ids, context=None, qty_updated=False): |
57 | + def update_fo_lines(self, cr, uid, ids, context=None, qty_updated=False, for_claim=False): |
58 | ''' |
59 | update corresponding FO lines in the same instance |
60 | ''' |
61 | @@ -237,6 +237,18 @@ |
62 | ], context=context) |
63 | if linked_out_moves: |
64 | self.pool.get('stock.move').write(cr, uid, [linked_out_moves[0]], {'product_qty': sol_values['product_uom_qty'], 'product_uos_qty': sol_values['product_uom_qty']}, context=context) |
65 | + elif for_claim: |
66 | + # if claim created but IR already confirmed, if qty can't be decreased on OUT because OUT was split, cancel the qty related to the claim |
67 | + linked_out_moves = self.pool.get('stock.move').search(cr, uid, [ |
68 | + ('sale_line_id', '=', pol.linked_sol_id.id), |
69 | + ('type', '=', 'out'), |
70 | + ('state', 'in', ['assigned', 'confirmed']), |
71 | + ('product_qty', '=', for_claim) |
72 | + ], context=context) |
73 | + if linked_out_moves: |
74 | + self.pool.get('stock.move').write(cr, uid, [linked_out_moves[0]], {'sale_line_id': False}, context=context) |
75 | + self.pool.get('stock.move').action_cancel(cr, uid, [linked_out_moves[0]], context=context) |
76 | + |
77 | self.pool.get('sale.order.line').write(cr, uid, [pol.linked_sol_id.id], sol_values, context=context) |
78 | if qty_updated: |
79 | # if FO line qty reduced by a Cancel(/R) on IN, trigger update to PO proj line |
80 | |
81 | === modified file 'bin/addons/return_claim/return_claim.py' |
82 | --- bin/addons/return_claim/return_claim.py 2019-07-22 12:08:20 +0000 |
83 | +++ bin/addons/return_claim/return_claim.py 2019-08-07 12:45:48 +0000 |
84 | @@ -383,6 +383,8 @@ |
85 | 'location_id': context['common']['input_id'], |
86 | 'location_dest_id': loc_obj.chained_location_get(cr, uid, stock_loc, product=x.product_id_claim_product_line)[0].id, |
87 | 'reason_type_id': context['common']['rt_goods_replacement'], |
88 | + 'prodlot_id': x.lot_id_claim_product_line and x.lot_id_claim_product_line.id or False, |
89 | + 'expired_date': x.expiry_date_claim_product_line, |
90 | }) for x in claim.product_line_ids_return_claim], |
91 | } |
92 | # creation of the new IN |
93 | @@ -1010,6 +1012,7 @@ |
94 | Synchronisation method for claims customer->supplier |
95 | - create counterpart claims for validated claims |
96 | ''' |
97 | + claim_line_obj = self.pool.get('claim.product.line') |
98 | warehouse_obj = self.pool.get('stock.warehouse') |
99 | event_obj = self.pool.get('claim.event') |
100 | sale_obj = self.pool.get('sale.order') |
101 | @@ -1017,6 +1020,7 @@ |
102 | curr_obj = self.pool.get('res.currency') |
103 | product_obj = self.pool.get('product.product') |
104 | uom_obj = self.pool.get('product.uom') |
105 | + lot_obj = self.pool.get('stock.production.lot') |
106 | |
107 | if context is None: |
108 | context = {} |
109 | @@ -1066,17 +1070,6 @@ |
110 | 'processor_origin': claim_info.processor_origin, |
111 | 'creation_date_return_claim': claim_info.creation_date_return_claim, |
112 | 'picking_id_return_claim': origin_pick_id, |
113 | - 'product_line_ids_return_claim': |
114 | - [(0, 0, { |
115 | - 'qty_claim_product_line': x.qty_claim_product_line, |
116 | - 'price_unit_claim_product_line': x.price_unit_claim_product_line, |
117 | - 'price_currency_claim_product_line': curr_obj.search(cr, uid, [('name', '=', x.price_currency_claim_product_line.name)], context=context)[0], |
118 | - 'product_id_claim_product_line': product_obj.search(cr, uid, [('name', '=', x.product_id_claim_product_line.name)], context=context)[0], |
119 | - 'uom_id_claim_product_line': uom_obj.search(cr, uid, [('name', '=', x.uom_id_claim_product_line.name)], context=context)[0], |
120 | - 'type_check': x.type_check, |
121 | - 'expiry_date_claim_product_line': x.expiry_date_claim_product_line, |
122 | - 'src_location_id_claim_product_line': location_id, |
123 | - }) for x in product_line_data], |
124 | }) |
125 | |
126 | claim_id = self.check_existing_claim(cr, uid, source, claim_data) |
127 | @@ -1095,6 +1088,26 @@ |
128 | }) |
129 | event_obj.create(cr, uid, event_values, context=context) |
130 | |
131 | + # Create lines |
132 | + for x in product_line_data: |
133 | + prod_id = product_obj.search(cr, uid, [('name', '=', x.product_id_claim_product_line.name)], context=context)[0] |
134 | + line_data = { |
135 | + 'claim_id_claim_product_line': claim_id, |
136 | + 'qty_claim_product_line': x.qty_claim_product_line, |
137 | + 'price_unit_claim_product_line': x.price_unit_claim_product_line, |
138 | + 'price_currency_claim_product_line': curr_obj.search(cr, uid, [('name', '=', x.price_currency_claim_product_line.name)], |
139 | + context=context)[0], |
140 | + 'product_id_claim_product_line': prod_id, |
141 | + 'uom_id_claim_product_line': uom_obj.search(cr, uid, [('name', '=', x.uom_id_claim_product_line.name)], context=context)[0], |
142 | + 'type_check': x.type_check, |
143 | + 'lot_id_claim_product_line': x.lot_id_claim_product_line and lot_obj.get_or_create_prodlot( |
144 | + cr, uid, x.lot_id_claim_product_line.name, x.expiry_date_claim_product_line, prod_id, |
145 | + context=context), |
146 | + 'expiry_date_claim_product_line': x.expiry_date_claim_product_line, |
147 | + 'src_location_id_claim_product_line': location_id, |
148 | + } |
149 | + claim_line_obj.create(cr, uid, line_data, context=context) |
150 | + |
151 | name = self.browse(cr, uid, claim_id, context=context).name |
152 | message = _('The claim %s is created by sync and linked to the claim %s by Push Flow at %s.') % (name, claim_info.name, source) |
153 | self._logger.info(message) |
154 | @@ -1750,7 +1763,6 @@ |
155 | ''' |
156 | context = context.copy() |
157 | context.update({'from_claim': True, 'keep_prodlot': True}) |
158 | - |
159 | # objects |
160 | move_obj = self.pool.get('stock.move') |
161 | pick_obj = self.pool.get('stock.picking') |
162 | @@ -1764,7 +1776,7 @@ |
163 | event_picking = pick_obj.browse(cr, uid, event_picking_id, context=context) |
164 | # We cancel the lines of the OUT linked to the IN/INT lines processed |
165 | # if the linked PO lines has an IR whose Location Requestor is ExtCU |
166 | - self._cancel_out_line_linked_to_extcu_ir(cr, uid, origin_picking, context=context) |
167 | + #self._cancel_out_line_linked_to_extcu_ir(cr, uid, origin_picking, context=context) |
168 | # we copy the picking |
169 | in_values = { |
170 | 'reason_type_id': context['common']['rt_goods_replacement'], |
171 | |
172 | === modified file 'bin/addons/sale/sale_order.py' |
173 | --- bin/addons/sale/sale_order.py 2019-07-31 12:02:50 +0000 |
174 | +++ bin/addons/sale/sale_order.py 2019-08-07 12:45:48 +0000 |
175 | @@ -2263,12 +2263,14 @@ |
176 | 'created_by_po_line': False, |
177 | 'created_by_rfq': False, |
178 | 'created_by_rfq_line': False, |
179 | - 'in_name_goods_return': '', |
180 | 'from_cancel_out': False, |
181 | 'created_by_sync': False, |
182 | 'cancelled_by_sync': False, |
183 | }) |
184 | |
185 | + if 'in_name_goods_return' not in default: |
186 | + default['in_name_goods_return'] = False |
187 | + |
188 | return super(sale_order_line, self).copy(cr, uid, id, default, context) |
189 | |
190 | |
191 | @@ -2958,7 +2960,6 @@ |
192 | vals.update({'type': 'make_to_order'}) |
193 | |
194 | self.check_empty_line(cr, uid, False, vals, context=context) |
195 | - |
196 | # UF-1739: as we do not have product_uos_qty in PO (only in FO), we recompute here the product_uos_qty for the SYNCHRO |
197 | qty = vals.get('product_uom_qty') |
198 | product_id = vals.get('product_id') |
199 | |
200 | === modified file 'bin/addons/sale/wizard/split_order_line.py' |
201 | --- bin/addons/sale/wizard/split_order_line.py 2019-01-31 13:47:22 +0000 |
202 | +++ bin/addons/sale/wizard/split_order_line.py 2019-08-07 12:45:48 +0000 |
203 | @@ -81,6 +81,7 @@ |
204 | 'sync_linked_pol': False, |
205 | 'resourced_original_line': split.sale_line_id.resourced_original_line and split.sale_line_id.resourced_original_line.id or False, |
206 | 'resourced_original_remote_line': split.sale_line_id.resourced_original_remote_line, |
207 | + 'in_name_goods_return': split.sale_line_id.in_name_goods_return, |
208 | } |
209 | # following new sequencing policy, we check if resequencing occur (behavior 1). |
210 | # if not (behavior 2), the split line keeps the same line number as original line |
211 | |
212 | === modified file 'bin/addons/stock/stock.py' |
213 | --- bin/addons/stock/stock.py 2019-07-31 12:02:50 +0000 |
214 | +++ bin/addons/stock/stock.py 2019-08-07 12:45:48 +0000 |
215 | @@ -1928,6 +1928,7 @@ |
216 | _sql_constraints = [ |
217 | ('name_ref_uniq', 'unique (name, ref)', 'The combination of serial number and internal reference must be unique !'), |
218 | ] |
219 | + |
220 | def action_traceability(self, cr, uid, ids, context=None): |
221 | """ It traces the information of a product |
222 | @param self: The object pointer. |
223 | @@ -1939,8 +1940,33 @@ |
224 | """ |
225 | value = self.pool.get('action.traceability').action_traceability(cr,uid,ids,context) |
226 | return value |
227 | + |
228 | + def get_or_create_prodlot(self, cr, uid, name, expiry_date, product_id, context=None): |
229 | + """ |
230 | + Search corresponding Batch using name, product and expiry date, or create it |
231 | + """ |
232 | + if context is None: |
233 | + context = {} |
234 | + |
235 | + # Double check to find the corresponding batch |
236 | + lot_ids = self.search(cr, uid, [ |
237 | + ('name', '=', name), |
238 | + ('life_date', '=', expiry_date), |
239 | + ('product_id', '=', product_id), |
240 | + ], context=context) |
241 | + |
242 | + # No batch found, create a new one |
243 | + if not lot_ids: |
244 | + lot_id = self.create(cr, uid, {'name': name, 'product_id': product_id, 'life_date': expiry_date}, context) |
245 | + else: |
246 | + lot_id = lot_ids[0] |
247 | + |
248 | + return lot_id |
249 | + |
250 | + |
251 | stock_production_lot() |
252 | |
253 | + |
254 | class stock_production_lot_revision(osv.osv): |
255 | _name = 'stock.production.lot.revision' |
256 | _description = 'Production lot revisions' |
257 | |
258 | === modified file 'bin/addons/stock_override/stock.py' |
259 | --- bin/addons/stock_override/stock.py 2019-07-31 12:02:50 +0000 |
260 | +++ bin/addons/stock_override/stock.py 2019-08-07 12:45:48 +0000 |
261 | @@ -1017,7 +1017,7 @@ |
262 | for stock_move in sp.move_lines: |
263 | if stock_move.purchase_line_id: |
264 | # get done qty for this PO line: |
265 | - domain = [('purchase_line_id', '=', stock_move.purchase_line_id.id), ('state', 'in', ['done', 'cancel', 'cancel_r'])] |
266 | + domain = [('purchase_line_id', '=', stock_move.purchase_line_id.id), ('state', 'in', ['done', 'cancel', 'cancel_r']), ('type', '=', 'in')] |
267 | done_moves = move_obj.search(cr, uid, domain, context=context) |
268 | done_qty = 0 |
269 | for done_move in move_obj.browse(cr, uid, done_moves, context=context): |
270 | |
271 | === modified file 'bin/addons/sync_so/purchase.py' |
272 | --- bin/addons/sync_so/purchase.py 2019-03-04 11:09:31 +0000 |
273 | +++ bin/addons/sync_so/purchase.py 2019-08-07 12:45:48 +0000 |
274 | @@ -203,6 +203,16 @@ |
275 | |
276 | if sol_dict['in_name_goods_return'] and not sol_dict['is_line_split']: |
277 | # in case of FO from missing/replacement claim |
278 | + original_claim_line = self.pool.get('purchase.order.line').search(cr, uid, [('line_number', '=', pol_values['line_number']), ('order_id', '=', po_ids[0]), ('state', 'not in', ['cancel', 'cancel_r'])]) |
279 | + if original_claim_line: |
280 | + pol_values['resourced_original_line'] = original_claim_line[0] |
281 | + # if SOL claim if for full qty of PO line, just link the existing POL with the new claim SOL |
282 | + claim_po_lines = self.pool.get('purchase.order.line').browse(cr, uid, original_claim_line, fields_to_fetch=['origin', 'product_qty', 'state'], context=context) |
283 | + for claim_po_line in claim_po_lines: |
284 | + if claim_po_line.state == 'confirmed' and claim_po_line.product_qty == pol_values['product_uom_qty']: |
285 | + self.pool.get('purchase.order.line').write(cr, uid, [claim_po_line.id], {'sync_linked_sol': pol_values['sync_linked_sol']}, context=context) |
286 | + return 'Claim missing processed' |
287 | + |
288 | pol_values['origin'] = self.pool.get('purchase.order').browse(cr, uid, po_ids[0], context=context).origin |
289 | pol_values['from_synchro_return_goods'] = True |
290 | |
291 | @@ -227,7 +237,16 @@ |
292 | move_ids = move_obj.search(cr, uid, [('picking_id', '=', pick_id), |
293 | ('line_number', '=', pol_values['line_number'])], context=context) |
294 | move_obj.write(cr, uid, move_ids, ({'purchase_line_id': new_pol}), context=context) |
295 | - |
296 | + # update qty on original claim pol line |
297 | + claim_pol_id = self.pool.get('purchase.order.line').search(cr, uid, [('line_number', '=', pol_values['line_number']), ('order_id', '=', po_ids[0]), ('product_qty', '>=', pol_values['product_uom_qty']), ('state', '=', 'confirmed')], context=context) |
298 | + if claim_pol_id: |
299 | + orig_qty = self.pool.get('purchase.order.line').read(cr, uid, claim_pol_id[0], ['product_qty'], context=context)['product_qty'] |
300 | + self.pool.get('purchase.order.line').write(cr, uid, claim_pol_id[0], {'product_qty': orig_qty - pol_values['product_uom_qty'], 'is_line_split': True}, context=context) |
301 | + self.update_fo_lines(cr, uid, [claim_pol_id[0]], for_claim=pol_values['product_uom_qty'], context=context) |
302 | + # check if original claim po line must be closed |
303 | + pending_move = self.pool.get('stock.move').search(cr, uid, [('type', '=', 'in'), ('purchase_line_id', '=', claim_pol_id[0]), ('state', 'not in', ['done', 'cancel', 'cancel_r'])], context=context) |
304 | + if not pending_move: |
305 | + wf_service.trg_validate(uid, 'purchase.order.line', claim_pol_id[0], 'done', cr) |
306 | pol_updated = new_pol |
307 | pol_state = '' |
308 | parent_so_id = False |