first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,157 @@
=====================================================
Sale Product Recommendation Association Rule Scenario
=====================================================
Imports::
>>> import datetime as dt
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.tests.tools import activate_modules
Activate modules::
>>> config = activate_modules(
... 'sale_product_recommendation_association_rule',
... create_company)
>>> Cron = Model.get('ir.cron')
>>> Party = Model.get('party.party')
>>> ProductTemplate = Model.get('product.template')
>>> ProductAssociationRule = Model.get('sale.product.association.rule')
>>> Sale = Model.get('sale.sale')
>>> SaleConfiguration = Model.get('sale.configuration')
>>> Uom = Model.get('product.uom')
Configuration association rule::
>>> sale_config = SaleConfiguration(1)
>>> sale_config.product_association_rule_transactions_up_to = (
... dt.timedelta(days=30))
>>> sale_config.product_recommendation_method = 'association_rule'
>>> sale_config.save()
Create customer::
>>> customer = Party(name="Customer")
>>> customer.save()
Create products::
>>> unit, = Uom.find([('name', '=', "Unit")])
>>> template = ProductTemplate()
>>> template.name = "Egg"
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.recommendable = True
>>> template.list_price = Decimal('1')
>>> template.save()
>>> egg, = template.products
>>> template = ProductTemplate()
>>> template.name = "Bacon"
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.recommendable = True
>>> template.list_price = Decimal('5')
>>> template.save()
>>> bacon, = template.products
>>> template = ProductTemplate()
>>> template.name = "Soup"
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.recommendable = True
>>> template.list_price = Decimal('8')
>>> template.save()
>>> soup, = template.products
>>> template = ProductTemplate()
>>> template.name = "Apple"
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.recommendable = True
>>> template.list_price = Decimal('3')
>>> template.save()
>>> apple, = template.products
>>> template = ProductTemplate()
>>> template.name = "Banana"
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.recommendable = True
>>> template.list_price = Decimal('4')
>>> template.save()
>>> banana, = template.products
Create some sales::
>>> sale = Sale(party=customer)
>>> line = sale.lines.new(product=egg)
>>> line.quantity = 12
>>> line = sale.lines.new(product=bacon)
>>> line.quantity = 2
>>> line = sale.lines.new(product=soup)
>>> line.quantity = 1
>>> sale.click('quote')
>>> sale.click('confirm')
>>> sale.state
'confirmed'
>>> sale = Sale(party=customer)
>>> line = sale.lines.new(product=egg)
>>> line.quantity = 6
>>> line = sale.lines.new(product=bacon)
>>> line.quantity = 4
>>> line = sale.lines.new(product=apple)
>>> line.quantity = 5
>>> sale.click('quote')
>>> sale.click('confirm')
>>> sale = Sale(party=customer)
>>> line = sale.lines.new(product=soup)
>>> line.quantity = 3
>>> line = sale.lines.new(product=bacon)
>>> line.quantity = 2
>>> line = sale.lines.new(product=banana)
>>> line.quantity = 5
>>> sale.click('quote')
>>> sale.click('confirm')
>>> sale = Sale(party=customer)
>>> line = sale.lines.new(product=apple)
>>> line.quantity = 2
>>> line = sale.lines.new(product=banana)
>>> line.quantity = 2
>>> sale.click('quote')
>>> sale.click('confirm')
Compute association rules::
>>> cron_compute_association_rule, = Cron.find([
... ('method', '=', 'sale.product.association.rule|compute'),
... ])
>>> cron_compute_association_rule.click('run_once')
>>> bool(ProductAssociationRule.find([]))
True
Test recommended products::
>>> sale = Sale(party=customer)
>>> [p.name for p in sale.recommended_products]
[]
>>> line = sale.lines.new(product=apple)
>>> [p.name for p in sale.recommended_products]
[]
>>> line = sale.lines.new(product=egg)
>>> [p.name for p in sale.recommended_products]
['Bacon']

View File

@@ -0,0 +1,12 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import ModuleTestCase
class SaleProductRecommendationAssociationRuleTestCase(ModuleTestCase):
"Test Sale Product Recommendation Association Rule module"
module = 'sale_product_recommendation_association_rule'
extras = ['sale_point']
del ModuleTestCase

View File

@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import load_doc_tests
def load_tests(*args, **kwargs):
return load_doc_tests(__name__, __file__, *args, **kwargs)