Commit Graph
109 Commits
Author SHA1 Message Date
Simon Lejeune 2fe84fd217 [FIX] stock: a view location cannot contain any quant 2017-11-07 14:01:33 +01:00
Simon Lejeune 4a5f07654f [FIX] stock: origin and partner_id when procurement group is set
We chose to erase the partner_id and ref field on a picking when its
content may refer to multile records. Note that the partner_id field was
already hidden in the view of internal picking.
2017-11-07 08:23:16 +01:00
Josse Colpaert 918dc4e6c4 [FIX] stock: do not merge mts and mto moves together
When we have two moves of the same product and procurement method
different on both, we don't want to merge them, because if a mto and a
mts move are merged together, it is possible to wait for an incoming
that will nerver come as a part the merged move should be taken from
stock
2017-10-24 15:15:01 +02:00
amoyaux f359ca0585 [FIX] stock: lock/unlock show details view
It is not possible to work directly on the operation tab
when the detailed operation tab is available. On detailed
operations page it is now impossible to add a new move line
when the picking is done and locked.

This commit add some condition in the view and add a check
in the move line creation. If the move line has a picking but
no move then we create it (mark as done directly)
2017-10-02 15:34:24 +02:00
Simon Lejeune 021a95d998 [FIX] stock: move: _action_assign and _free_reservation
The code made the assumption that everything brought by in chained move
is available on the quants. This is not always true, for example when x
products are brought by a move in the chain, the user can make an
inventory adjustment that reduce the quantity available. Thus, we
implement a fallback in case the quantity brought by is not available:
do not reserve more than what's really available. If the user make
available some products with the same characteristics (lot/owner/pack)
in the location, they will be used by a new call to _action_assign.
Indeed, the reserved quants are not discernable. This is not an issue in
reality, as the user cannot discern the products himself if they share
the same characteristics.
2017-10-02 10:11:49 +02:00
Simon Lejeune 1cded67619 [FIX] stock: edit done move line
When undoing the original move line, make sure to handle the packages
correctly (in the destination location, undo the result package, not the
source one.
2017-09-30 17:12:20 +02:00
Simon Lejeune 191873f8a5 [FIX] stock: edit done move line
When undoing the original move line, make sure to undo the quantity
according to the UOM of the move line.
2017-09-30 17:12:20 +02:00
Simon Lejeune 6a093d1dec [REF] stock: when editing the initial demand of a receipt, run action assign
We also display the "check availability" button if the move is ready but
one of the move is partially available.
2017-09-30 17:11:48 +02:00
Simon Lejeune 0b664a973c [FIX] stock: product: prevent updating type if linked to a move line 2017-09-29 14:55:20 +02:00
amoyaux b812b5b625 [FIX] stock: scrap move update scrap object
Previously editing a done move line only update
the quants to the right location. However the stock.scrap
related object has not its qty updated.

This commit modify the write of stock move line in order
to also modify the stock scrap object to the correct quantity
2017-09-29 12:18:49 +02:00
Pratima Gupta 55c0221e38 [IMP] stock, mrp{,_repair}: warn when operating on out of stock products
This implements a warning when the user tries to do any of the
following operations on a product that is not in stock:

- Scrapping
- Unbuilding
- Repairing

The warning displays the current stock of the product in question per
location which can be helpful in case the user selected the wrong
location.
2017-09-26 21:36:10 -07:00
amoyaux e91fd246d2 [FIX] stock: merge move not always working.
Correct sort on recordset. See this commit for more
information cdd7f09
2017-09-22 16:13:14 +02:00
amoyaux 993de2d354 [FIX] stock: move without initial demand/quantity
When processing picking containing moves without
quantity done and without initial demand. These moves
were moving automatically to a new backorder.

It was also possible to validate picking without
quantity done for all moves.

This commit raise an error if the user try to valiate
a picking with all moves without quantity done and without
initial demand. Or cancel all these moves if the picking
is validate with correct moves.
2017-09-21 10:35:49 +02:00
Joren Van Onder a2a361f7e0 [IMP] stock: ask confirmation when validating overprocessed moves 2017-09-20 15:08:34 +02:00
Joren Van Onder 54ad8297af [IMP] stock: rename test_immediate_validate_ to something more sensible
Introduced by forward-port in c5f680200c.
2017-09-20 15:08:33 +02:00
Joren Van Onder 6e931e4e3c [IMP] stock: simplify stock.picking states
Remove 'partially_available'. This particular state is now also
represented by the 'assigned' state.
2017-09-20 15:08:30 +02:00
Raphael Collet 8ffe241bee [FIX] *: incorrect many2many commands
Those cases worked by chance until the former commit.
2017-09-20 13:30:56 +02:00
amoyaux 5d7e6dfad5 [IMP] stock: merge moves
The rationale for the need of a merge move mechanism is that, with the new default view,
having multiple stock move for the same products is confusing. The idea is that if a move
is confirmed in a picking already having a move with the same characteristics, we update
the existing move and unlink the new one. That’s why it’s done at the end of `_action_confirm`.

In some cases, merging moves is unwanted (backordered moves for examples). Therefore, we chose
to add a kwarg to `_action_confirm` in order do control the mechanism.
2017-09-18 15:04:14 +02:00
Simon Lejeune 6aebc80053 [REF] stock, etc: only expose public method, remove indirection
also, remove now useless api.multi and dummy methods here and there
2017-09-15 17:49:37 +02:00
Christophe Simonis e390b0d640 [MERGE] forward port branch saas-17 up to 1e17035f71 2017-09-13 20:07:38 +02:00
amoyaux 0f9302af1f [FIX] stock: recheck availability on mts move bypassing reservation
When running action_assign on a mts move bypassing the reservation,
we always created a new stock move line with the quantity of the move.
This proved to be too naive when running recheck availability.

Exemple: Let’s say I have a reserved move of quantity 5.
If I edit the initial demand to 7 and click on recheck availability,
I end up with a move line of 5 and a move line of 7. We adadapt the
code in a similar way that what’s done in _update_reserved_quantity,
by looking for a candidate move line and only increasing the reserved
quantity by what still needs to be reserved.
2017-09-13 17:30:20 +02:00
Christophe Simonis c5f680200c [MERGE] forward port branch saas-17 up to d08b4407be 2017-09-12 12:09:11 +02:00
Simon Lejeune d08b4407be [REF] stock: _get_available_qty and tracked products
Suppose you have a product tracked by serial number. In your inventory,
you have two quants: -1 for serial1, +1 for serial2.

If you create a move for 1 product and try to run `action_assign`, it
didn't work before this patch because stock.move's
`_update_reserved_quantity` is guarded by a call to
an unstricted `_get_available_quantity` (unstricted meaning considering
all quants regardless of their lot_id/package_id/owner_id). This call
resulted in an available quantity of 0, thus the stock move could not be
reserved

To fix this issue, we patched `_get_available_quantity` so that it
rightly considers products of different lot_id as different products,
i.e. it returns an available quantity of +1 in the initial scenario. Of
course, we consider all quants of the same lot_id, i.e. if you have -1
for serial1 and +1 for serial2, the available quantity amounts to 0.

In another scenario, let's say we have only -1 serial1 in stock, if we
run `_get_available_quantity`, the method should return 0: nothing is
reservable. We continue this reasonment by returning 0 everytime the
available quantity is negative, tracked or not. This is probably what a
method named `_get_available_quantity` should have done since the
beginning.

There's only a single case where we need to know the quantity even if
it's negative: it's just after we move a quant to its destination
location. If this quant was tracked and resulted in a negative quant
(i.e. we moved something we didn't have), we try to compensate with an
untracked quant. In this special case, we do not want to ignore the
negative quants when calling `_get_available_quantity`.  That's why we
introduce a new argument to this method. We could have added a new method
`_get_quantity` for clarity sake.
2017-09-12 10:50:04 +02:00
Pierre Masereel 45d706a607 [FIX] stock: action_done on move without quantity done
When we validate stock move having move lines with quanity done equal to
'0', these move lines are unreserved and in MRP, it creates move lines
with product_qty = 0 and qty_done = 0 which is not wanted
2017-09-11 14:48:08 +02:00
Fabien Pinckaers 0e4f3bb959 [IMP] stock: remove procurement orders to fufill immediately
This removes the procurement.order model. To fufill their needs SO, PO, MO and
stock moves now call the _run method of the relevant procurement.group.

This mecanism is now only used for stockable product, tasks now uses their own
independent mecanism.

The _run method will check all the applicable rules and create directly the
needed model to fufill the need.

The modules stock, purchase, mrp, extends the _run method to implement their
specific strategy relevant for the rule type they define.

If an exception happens the message will be logged as a mail messsage on the
source model, for example, if a sales order cannot be fufilled the salesperson
will now see directly the reason.

OLD commit messages:
[WIP] procurement: removing procurement.order in stock, sale, purchase, sale_stock. WIP
fixup! [WIP] procurement: removing procurement.order in stock, sale, purchase, sale_stock. WIP
[IMP] Basic tests
[FIX] test not necessary anymore
[FIX] remove unnecessary print statement
[FIX] unnecessary test + why passing warehouse worked before?
[IMP] purchase: one move by purchase order line
[FIX] purchase: correct inventory tests and pass move_dest_ids among procurements
[FIX] because of bad cherry-pick merge
[IMP] make mrp pass by adding move_dest_ids there too
[IMP] tests of sale_mrp, no need for cancelpropagation then
[IMP] better to consistently use recordsets also for one2many
[FIX] purchase_requisition
[FIX] Exceptions should trigger errors, which should be caught in the tests
[FIX] sale_mrp: remove usage of procurement.order and use sale order name instead of sol
[FIX] stock_dropshipping: add sale_line_id on purchase_line_id
[FIX] Remove pdb
[IMP] add stock_dropshipping files
[IMP] stock: search carrier through sale line instead of procurement group
[IMP] add procrule test and preision needed when updating sol
[FIX] sale_order_dates + [IMP] procurement exceptions by scheduler
[FIX] No need to return task
[IMP] move file as name changes and add corrections
[FIX] Continue Run Schedulers wizard fix
[FIX] name issues of takss
[FIX] updating sale order line, but there is still a problem with the recompute
2017-09-08 17:08:05 +02:00
Joren Van Onder 9d64002b58 [IMP] stock: check serial/lot numbers before backorder wizard
To avoid the error asking to set serial/lot numbers popping up after
the user clicks 'Create backorder'.
2017-09-07 19:43:16 -07:00
Hiral Bhavsar 0bc29de024 [IMP] stock: group tracked products in stock.move.line
When the picking type doesn't have use_create_lots or
use_existing_lots the products should end up in one
stock.move.line. The user will then be able to validate the picking
without specifying serial/lot numbers.
2017-09-07 14:23:28 -07:00
amoyaux 209fd529f8 [FIX] stock : check backorder compare apples and oranges.
The function that checks if we need a back oder or not compares
the initial demand and the quantity processed on the picking.

When unit of measure are activated the initial demand (product_qty)
uses the uom of the product. However the quantity processed on the move
(quantity_done) uses the uom of the move.

This commit uses product_uom_qty instead of product_qty. Product_uom_qty
represents the initial demand transformed with the uom of the move.
It also add a small test with a back order that ensure the quantities
are correct.

It also repairs the test stock flow where in some case immediate transfer
return the back order wizard instead of processing the move. In these cases
we catch the back order wizard and run it.
2017-08-29 15:22:07 +02:00
Simon Lejeune 72ff51f565 [REF] stock: product: _compute_quantities
This method is used to set `qty_available`, `virtual_available`,
`incoming_qty` and `outgoing_qty`.

We change the depends because only looking on stock.move is enough (all
changes on quants are made through stock moves, and we de not support to
edit directly quants anyway).

This method will call `_get_domain_locations` and we make sure that,
when the `company_owned` key is present in the context, we also return
domains to find products that are in a location that belongs to the
current user's company. This is done in order to include transit
location.

Also, remove the comment from tde. As these fields are displayed in
view, only using the context could alter the behavior.
2017-08-25 16:10:19 +02:00
Simon Lejeune fa62521537 [FIX] stock: stock.move.line's write
Make sure that a move's `product_uom_qty` is equal to its
`quantity_done`, even after writing on a done move line.
2017-08-24 11:28:11 +02:00
amoyaux b970bf865a [FIX] stock: unable to return SN in chained moves
Use case to reproduce the bug:
- Set multi location in settings
- Set warehouse's deliery method as pick/pack/ship
- Deliver a product to customer
- Process a return from customer to output.
- Create a return from output to pack ->
Unable to reserver product.

It happens because return moves where not linked together but have
the picking that created the return as origin.
Thus action_assign does not detect the return moves and can't
guess the real quantity available.

This commit add a behavior that will create links between
return move. It can be guess from parent move(the picking's move from which
the return is created) and its move dest/orig that have already
created other return. It also correct action assign because
the group by could retourn same line with return moves.
It add a test that check returns and links between them.
2017-08-17 17:49:09 +02:00
amoyaux 2a160329bb [FIX] stock : no more automatic backorder
When validating a stock picking there were 2 different cases:
(1) If all qty are equal to 0 it will display a wizard asking
if the user want to set the quantity done to the reserved quantity
for all moves. If the user accept it will automatically perform the
moves after setting the quantity done.
(2) If the user set a quantity on a move, it will check if there is
a need for a back order. If yes it will display a wizard asking if
a back order is needed or not.

However the check if a back order was needed or not was never perform
in case 1. If the quantity reserved was lower than the initial demand
a back order was automatically created.

This commit add the step 2 in the procedure of step 1 (after setting the
quantity done).
2017-08-17 17:16:21 +02:00
amoyaux 3c135d3123 [IMP] stock : reserved quantity should be 0 for done move
The quantity reserved for move was never modified once the move
is done. It is a nonsense to have a reserved quantity for a done
move.

This commit add a constraint that ensure the quantity of
move line to be 0 if it is in state done. Also it add a write
on move_line's 'action_done' function that set the reserved quantity
to 0 for all move line processed.

It does not introduce any change on the stock move itself since the
reserved quantity is the sum of all its move lines's reserved quantity.
2017-08-17 17:16:00 +02:00
Simon Lejeune e1cea2640f [REF] stock: create quants in every location
The purpose of this is to help stock manager in their quants analysis.
An overview of quants can be accessed via inventory menu and for specific
lot/SN via the locate button.

This commit add quants in every location (only internal location previously)
The purpose is to introduce a double entry for quant (add quants to a destination
location will always remove quant from a source location).

Quants in customers/suppliers location are shared between all customers/suppliers.
In order to know the amount of product that come from a specific customer/supplier
the tracability report should be used.
2017-08-07 12:10:13 +02:00
amoyaux 657e5c15a3 [FIX] stock : reserve quantity with uom and chained moves
A bug happens in stock move's action_assign method. It tries to get
the quantity done and the reserved quantity from the parent move and
sibling move in order to guess the available quantty.

With uom activatred, the quantity done is not always the same than the quant
quantity and the quantity done on stock move/stock move lines has to be
converted in order to know the real quantity available/

This commit change the quantity done in action assign to the
associate product uom.
2017-08-01 14:50:32 +02:00
Pierre Masereel 0fbe90b227 [REF] stock: quant: use in_date field
Set the `in_date` field to now when creating a tracked quant.
Set the correct `in_date` field when moving a quant (this is done by
adding a kw argument to `_update_available_quantity` and adapting the
code that moves quant in stock.move.line).

If quants from the same lot go together in the same location, we merge
them and keep the older date (as the user will have no way to tell the
difference anyway).

We add multiple test cases:
    - `in_date` are only set on tracked quants
    - FIFO and LIFO are correctly applied
    - keep the oldest `in_date` when merging quants
    - editing a done move line or creating one in a done picking is
      correctly working

Joint work with sle-odoo.
2017-07-28 11:38:31 +02:00
Christophe Simonis 4f501348c4 [MERGE] forward port branch saas-16 up to 46e1104ce1 2017-07-26 19:55:44 +02:00
Christophe Simonis 46e1104ce1 [MERGE] forward port branch saas-15 up to 681f03e309 2017-07-26 19:41:57 +02:00
Christophe Simonis 681f03e309 [MERGE] forward port branch saas-14 up to c4e9b854ff 2017-07-26 18:47:54 +02:00
Pierre Masereel 8a497cdd5f [FIX] stock: quant: _update_reserved_quantity and negative quantity
If we have multiple quants returned when we want to decrease the
reservation of a move line, the min function will always return the
quantity passed in argument because 'reserved_quantity' is always a
positive number and quantity a negative one. This can lead to negative
reserved quantity on a quant, if the quantity to reserve on the first
quant is lower than the absolute value of the quantity to decrease.

To fix this, we correctly separate the behaviors for decrease and
increase.

We add a test that show the, now fixed, bug.
2017-07-26 17:23:55 +02:00
Pierre Masereel 7a39ab50c5 [FIX] stock: move line: decrease reserved quantity
When we decrease the reserved quantity, the argument 'strict' must be
set to 'True', else we might unreserve quants of another move line.
This behavior has been lost in rev: https://github.com/odoo/odoo/commit/9bb696e13abcbf95c9552fab60b1dfb997afaa59

We introduce a test to show where an issue happened without this
patch: have tracked and untracked quants for the same product in stock,
reserve them and edit the untracked move line in order to set a lot to
it. The first step will be to unreserve the move line without lot, and
if we do not pass a Strict kw, stock.quant's `_gather` will return
quants with lot and unreserve on them. Everything is now inconsistent
and lead to issues upon validation.
2017-07-26 16:42:00 +02:00
Simon Lejeune 2d137f56c8 [REF] stock: action_done on stock.move.line
Before this commit, `action_done` on stock.move.line was intended to
receive the recordset of the move lines of a single move where the move
lines having a null `qty_done` were already unlinked.

This part of code was in stock.picking's `button_validate` and not
copied in mrp, and weird things happened when mrp tried to run
`action_done` on a stock.move.line with a `qty_done` of 0.

We move this check directly in `action_done`, as well as the check on
the picking type that was done in stock.move's `action_done`.

We also adapts rev[0] that was not working anymore since the new stock,
and add some tests.

[0] e79eaecc46
2017-07-25 17:24:12 +02:00
Christophe Simonis 5ed09bc17c [MERGE] forward port branch saas-11 up to c16ec6405b 2017-07-25 14:27:31 +02:00
Christophe Simonis 06b670e6ba [MERGE] forward port branch 9.0 up to e2a255717f 2017-07-24 19:41:30 +02:00
Simon Lejeune 8822b7cfa4 [FIX] stock, stock_account: add move when picking is available
When a picking is available, any added stock move should directly be in
the available state. This is done thanks to a key in context put in the
one2many (stock.move) field on the picking view and an override of
stock.move's default_get. Sadly, an extension of the picking view in
stock_account redefined the context attributes, and the new context did
not have the special key we need. As all the context keys present in
stock_account are present in stock, we remove the extension. And we add
a simple test in stock.
2017-07-24 16:06:57 +02:00
Jaykishan Solanki bee246b22b [FIX] stock: populate date_done field on picking 2017-07-24 13:14:37 +02:00
Pierre Masereel e2a255717f [FIX] stock: MTO move status
When we validate a SO with an MTO product, then an RFQ and a delivery
picking are created. The status of the delivery picking is in state
'confirmed', but should be 'waiting' as the delivery waits for a
specific delivery input.

The problem is caused by the unreserve method, which is called in the
'procurement_jit' module. This method only checks that a move has
ancestors to determine if the move should be in waiting or in confirmed,
which is not the case for our delivery move because the RFQ has not been
validated yet so there is not ancestors yet.

To fix this issue, we check the 'procure_method' of the move, and if it
is in 'make_to_order' we put it in 'waiting' instead of 'confirmed'.

We also fixed the function recalculate_move_state that could cause the
same problem.
2017-07-24 10:53:36 +02:00
amoyaux 52c21bd53e [FIX] stock : _update_available_quantity and sublocations
When updating the quantity on hand in a location without quant but
where one of its sublocations has onee, it will increase the available
quantity in the sub location instead of the defined location.

This happens because _gather method in quant search on child_of location
in any case.

This commit change the domain by using '=' on the locations if `strict` is
passed as True in _gather, or 'child_of' if it is set as False. It also
removes the strict argument on _update_avaible_quantity since it does
not make sense to change the quantity on an undefined quant. And it was
never used in our code for good reasons.
2017-07-19 19:37:32 +02:00
Simon Lejeune cc181711dd [FIX] stock: scrap: allow scrapping consumable
A previous revision[0] forbid to scrap consumables. The rationale at the
time was that, since consumables do not have quant, scrapping them does
not make sense. It appears that people use this feature on consumable
for traceability reason, so we bring back the old behavior.

A slight change was done in stock_scrap.py: if the product is a
consumable, do not raise the error if the quantity to scrap is not
available in stock for obvious reasons.

Also, a leftover todo in the code indicate that we should unreserve the
any move having reserved the scrapped product. This is actually already
done, since this mechanism is in the move line `action_done` and a scrap
uses a classical stock move and stock move lines.

We introduce some test to prove that it is possible to scrap a stockable
product and the quant are impacted, to scrap a consumable product and
the stock is not impacted and to scrap something that was reseved by a
move and that the move changes its state.

[0] 86f08c091e
2017-07-19 18:29:16 +02:00
amoyaux d6ed41f9d7 [FIX] stock: move: initial demand should be 0 on create
When creating a new line in a picking, the initial demand should be 0.
When editing a move line and changning the product, the initial demand
should not be reset to 1.

The rationale is that when creating a picking by hand, most users do
want to skip the reservationm and, by forcing the initial demand at 1,
we force the user to enter to encode two times what he's doing.
2017-07-19 17:28:40 +02:00