Welcome!

This community is for professionals and enthusiasts of our products and services. Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.


0
Avatar

Maarten Bressers

--Maarten Bressers--

2546
| 3 1 2
Oisterwijk, Nederland
--Maarten Bressers--
Maarten Bressers
Op 09-10-20 09:53

https://www.odoo.com/nl_NL/forum/help-1/question/it-is-not-possible-to-unreserve-more-products-of-than-you-have-in-stock-138783#:~:text=It happens because the reserved

1.debug mode

2.technical/server actions

3.create

4.action name: e.g. fix unreserved qty

5.model: ir.actions.server

6.action to do: "execute python code"

7.copy/paste the fix underneath the pre-existing code

8."save" 


quants = env["stock.quant"].search([])


move_line_ids = []


warning = ""


for quant in quants:


    move_lines = env["stock.move.line"].search(


        [


            ("product_id", "=", quant.product_id.id),


            ("location_id", "=", quant.location_id.id),


            ("lot_id", "=", quant.lot_id.id),


            ("package_id", "=", quant.package_id.id),


            ("owner_id", "=", quant.owner_id.id),


            ("product_qty", "!=", 0),


        ]


    )


    move_line_ids += move_lines.ids


    reserved_on_move_lines = sum(move_lines.mapped("product_qty"))


    move_line_str = str.join(


        ", ", [str(move_line_id) for move_line_id in move_lines.ids]


    )




    if quant.location_id.should_bypass_reservation():


        # If a quant is in a location that should bypass the reservation, its `reserved_quantity` field


        # should be 0.


        if quant.reserved_quantity != 0:


            quant.write({"reserved_quantity": 0})


    else:


        # If a quant is in a reservable location, its `reserved_quantity` should be exactly the sum


        # of the `product_qty` of all the partially_available / assigned move lines with the same


        # characteristics.


        if quant.reserved_quantity == 0:


            if move_lines:


                move_lines.with_context(bypass_reservation_update=True).write(


                    {"product_uom_qty": 0}


                )


        elif quant.reserved_quantity < 0:


            quant.write({"reserved_quantity": 0})


            if move_lines:


                move_lines.with_context(bypass_reservation_update=True).write(


                    {"product_uom_qty": 0}


                )


        else:


            if reserved_on_move_lines != quant.reserved_quantity:


                move_lines.with_context(bypass_reservation_update=True).write(


                    {"product_uom_qty": 0}


                )


                quant.write({"reserved_quantity": 0})


            else:


                if any(move_line.product_qty < 0 for move_line in move_lines):


                    move_lines.with_context(bypass_reservation_update=True).write(


                        {"product_uom_qty": 0}


                    )


                    quant.write({"reserved_quantity": 0})




move_lines = env["stock.move.line"].search(


    [


        ("product_id.type", "=", "product"),


        ("product_qty", "!=", 0),


        ("id", "not in", move_line_ids),


    ]


)




move_lines_to_unreserve = []




for move_line in move_lines:


    if not move_line.location_id.should_bypass_reservation():


        move_lines_to_unreserve.append(move_line.id)




if len(move_lines_to_unreserve) > 1:


    env.cr.execute(


        """ 


            UPDATE stock_move_line SET product_uom_qty = 0, product_qty = 0 WHERE id in %s ;


        """


        % (tuple(move_lines_to_unreserve),)


    )


elif len(move_lines_to_unreserve) == 1:


    env.cr.execute(


        """ 


        UPDATE stock_move_line SET product_uom_qty = 0, product_qty = 0 WHERE id = %s ;


        """


        % (move_lines_to_unreserve[0])

    )




Blijf geïnformeerd

Over deze community

This is a forum for internal use only... Lees de regels

Vraag hulpmiddelen

3 volger(s)

Statistieken

Gevraagd: 09-10-20 09:51
Gezien: 17 keer
Laatst bijgewerkt: 09-10-20 09:54