linear programming - Python + Pulp

Job ID: 33549351

Budget: $30 – $250 USD

A company resells cleaning supplies on demand. The company does not have stock, so when each order is received, it must subdivide that order among its suppliers. Each customer places their order and it is delivered "in parts" over the course of the week.
The government intervenes in the economy by generating price agreements with some suppliers, so that they sell a certain item at a certain price. The government conditions the maximum amount sold for some items.
The order is given by item, quantity.
Each supplier has a price list and associated with it a possible quantity discount for each item (9 possible discounts) per day.
The supplier is associated with a cost of delivery of the merchandise and a minimum delivery.
Each provider can launch promotions:
conditioned with
• different sale days (can be active on Sunday, or Monday and Tuesday, or whatever combination he wants)
• minimum amount of sale to access the promotion
• maximum discount amount
The types of discounts are as follows:
• Promotions takes A and pays B (BOGOF)
• Take A and pay B with a C% discount
• Discount per item (different % for each item)
• % discount on the total amount

Likewise, each article has “alternative brands” to the one selected by the client. That is, the same article but of another brand. The process should take this information into account to select the cheapest option. For example, if the customer selected 1KG of bleach brand AAA, it may be convenient to buy 1KG of bleach brand BBB (because it is cheaper).

Also, each item has "different packing" to the one selected by the customer. That is, the same article but of another unit of measure. The process should take this information into account to select the cheapest option. For example, if the client selected 1KG of bleach , it may be convenient to buy 2*0.5KG of bleach (because it is cheaper).

Obtain the minimum price order, taking into account all factors, programmed in Python + Pulp.
The attached file specifies the information taken from the database that feeds the process.