If a PO with picking is canceled, then reset to draft and confirmed again
two pickings are created. Indeed when creating the picking, moves related
to the PO are confirmed and assigned, even those which were previously
canceled.
This commit ensures that canceled and done moves stay in their state.
This avoid having two pickings for a single PO.
When there are 3 different lots reserved for 3 different serial
numbers for the final product, if you do the first finished product, the
finished lot is put on all stock.move.lots even if nothing has been
consumed for it.
This results in traceability report for the first finished lot being linked
to all of lots instead of just the one that was consumed.
Now we update lot_produced_id only on stock.move.lots where quantity_done > 0.
That way it will only links with the correct one.
Some banks, like ING, create a line for free charges.
We just skip those lines as there's a 'non-zero' constraint
on the amount of account.bank.statement.line
After modifying the database schema, if some models do not have a table/view,
attempt to recreate it by calling their method `init()`, following inter-model
dependencies.
Fix the model `board.board` by making it an abstract model.
Add the missing model dependencies on report `crm.partner.report.assign` to make
it depend on report `account.invoice.report`.
Push and procurement rules are some difficult concepts to understand.
Add some tooltips :
Push Rules tooltip :
When a move is foreseen to a location, the push rule will automatically create a move to a next location after. This is mainly only needed when creating manual operations e.g. 2/3 step manual purchase order or 2/3 step finished product manual manufacturing order. In other cases, it is important to use pull rules where you know where you are going based on a demand.
Procurement Rules :
The demand represented by a procurement from e.g. a sale order, a reordering rule, another move, ... needs to be solved by applying a procurement rule. Depending on the action on the procurement rule, this triggers a purchase order, manufacturing order or another move. This way we create chains in the reverse order from the endpoint with the original demand to the starting point. That way, it is always known where we need to go and that is why they are preferred over push rules.
overwrite in the context was never passed to update_translations
Loading the translations with the overwrite checked did not overwrite the
previous translations
Introduced at d465346
normal mode: Importing only regular/basic fields from source file
advanced mode: Importing any related fields from source file(i.e. if detected pattern in header like '<relational_fieldname>/<fname>')
- Rename following checkbox "Show all fields for completion (advanced)" in "Show fields of relation fields (advanced)"
- If the import file contains a column with a field of a relation field, show the column label in the preview, even if "Show fields of relation fields (advanced)" is not checked > to make it less confusing when importing advanced files (e.g. products with attributes)
Purpose:
On a list view (Ex: the invoices list view), if a column is a currency column (Ex: total amount), it makes no sense to display the aggregate (Ex: sum) if the records contains several currencies.
Spec:
Don't display the aggregate of a column if a least two records are in different currencies.
The tests are running on consumable product, it means that there is no
resevation of quants and verification of reserved quants when you create
and assign moves. So the tests are not really usefull with consumable
products.
To make the tests efficients, we set the products as stockable. And we
use 'reserved_availability' instead of 'availability' in tests
'test_10_pickings_transfer_with_different_uom' and in
'test_00_picking_create_and_transfer_quantity' be cause the assert is
done after the move reservation.
In test 'test_00_picking_create_and_transfer_quantity' when we check the
move_lines state after the action assign, the first and last should be
only 'confirmed, because they are partially available. When product
were not stockable, all lines were assign, because there was no check of
the reserved quants.
In 'test_10_pickings_transfer_with_different_uom' we removed the call
'picking_out.action_confirm()' and 'picking_out.action_assign()',
because they already have been called before.
The price set for the non integrated carrier must be the same either when you
set it on the SO with button "set_price" or when you set it on the stock picking.
The field "carrier_price" must be in readonly when the state of the picking is done.
opw:691224
When a column holds more than 40 records tooltip indicates 40/<record_number>.
However this is not really helping. What is interesting is the total number
of records.
If multiple views had the same name and same priority, the order
of application of their xpath was not deterministic. That may be a
big deal if both of them were doing xpath with position = inside.
Kanban state values are different from their visual display. When searching
on kanban state it is not easy to understand the link between the label
and the color. We now set the label as the color to ease matching and
searching. However in kanban view labels can be defined on the stage
itself. This way searching is done on the color while working with
tasks and issues in kanban is done using business meaning defined on
the stage.
Purpose:
What is the purpose of hr_timesheet_sheet ? Because it is installed when you install project_issue_sheet and you have a lot of unnecessary menus + ugly view of timesheet grid. For example in Timesheet menu: My Timesheets, All Timesheets, My Current Timesheets, My Timesheets, Detailed Activities (still timesheets), Timesheet App.
- Extend 'account' method and not '_prepare_layout_values' to add
document count. This avoid useless 'search_count'.
- Make the 'active' page working, by passing 'page_name' to the template
- Uniformize the pages when no document are available
website portal now provide mecanism to sort and filter the
paginated document on the portal pages.
All portal module now use this mecanism, like they do for
'archive document' and 'pager'.
A generic template was added in website_portal. To use
it, renaming variables in method controller was required
to make it as generic as possible.
Some style cleaning was also done to make portal pages
consistent.
Hypothesis:
- We have a product 'pa' managed by lot.
- We don't create lots, when we receive products.
- We create lots when we deliver products.
- We don't have any units of product 'pa' in stock.
- We recieve 4 units of product 'pa' in one picking.
- We create a picking to deliver 3 products 'pa' (stock.move).
- We actually deliver 4 units of product 'pa' (1 in 'LOT1', 1 in 'LOT2' and 2 in 'LOT3').
- The problem also occurs when you just have 2 products in and 2 out in
different lots, but we based the example on the tests defined in
'test_stock_flow.py'
Thesis:
- We don't have anymore quants of product 'pa' in stock after delivering the 4 units
Problem:
- We actually have 3 quants of product 'pa' in stock, two having the 'lot_id' corresponding
to 'LOT3' and 'qty=-1', and one having no 'lot_id' and 'qty=2'.
Origin:
- This problem is caused by a bad condition in the function '_move_quants_by_lot' defined
in the model 'stock.move'.
Explanation:
When we reserve the 3 units of product 'pa' in the picking out, the quant in stock having
'qty=4' is splitted in 2 quants, one having 'qty=3' and a 'reservation_id' equals to the id
of the move in the picking out. And one with 'qty=1', having not reservation id.
So once the products are reserved, we will complete the pack operation present in the picking.
We will add 4 units of product 'pa' dispatched in Lot as 1 in 'LOT1', 1 in 'LOT2' and 2 in 'LOT3'
to the pack operation.
Then when we validate the picking, the quants with references to 'lot_id' must be created, and
then moved to the client.
Because we have set 4 units of the product 'pa' in the pack operation, an extra move of 1 unit of
product 'pa' is added to the picking to have a total of 4 untis of 'pa' moved to the customer
location.
When the function '_move_quants_by_lot' is called, it gets in parameter 'false_quants' which contains
the quant reserved by the first move, it means the quant in stock with the reservation_id to the first
move, and 'qty=3'.
The function, will now split this quant in 2 different quants:
- one with 'lot_id' corresponding to 'LOT1' and moved to customer location.
- one with no 'lot_id' staying in stock location still reserved to the first move.
Then, the function should reset the 'false_quants' with the quant containing the 2 last units reserved
in the quant from the last split in order to complete the next operation (create a quant with lot_id 'LOT2').
But the condition to find this new reserved quant contains (x.package_id.id != ops.package_id.id) where x is
a quant which is wrong, because when we don't manage package, x.package_id.id is 'False' and ops.package_id.id
is 'False' too. So it doesn't find the remaining quant.
So to fix it, we changed this part of the condition as the quant package_id should be equal to the pack operation
package_id (if no packages, False = False)
The partner of an account move is defined as a related on the partner of
the move lines. This kind of relation implies that the partner of the
account move is the partner of the first account move line. This is
arbitrary and doesn't make much sense.
Closes#14167
opw-693289
In the pivot view, when the user select a new field to drill down, the
previous dropdown menu displayed all the groupable fields as valid
choice. This commit disables all the fields that have already been
selected. It means that they will be greyed out, and inactive in the
UI.