diff --git a/locale/es.po b/locale/es.po index 25012ac..a8a9e84 100644 --- a/locale/es.po +++ b/locale/es.po @@ -201,3 +201,7 @@ msgstr "Tiendas" msgctxt "view:purchase.shop:" msgid "Users" msgstr "Usuarios" + +msgctxt "field:purchase.shop,invoice_subtype:" +msgid "Subtype" +msgstr "Tipo de Documento" diff --git a/party.py b/party.py index 44b0754..8b95f7d 100644 --- a/party.py +++ b/party.py @@ -2,7 +2,6 @@ # The COPYRIGHT file at the top level of this repository contains # the full copyright notices and license terms. from trytond.model import fields -from trytond.pyson import Eval from trytond.pool import PoolMeta from trytond.transaction import Transaction @@ -17,7 +16,6 @@ class Party(metaclass=PoolMeta): @staticmethod def default_shops(): if Transaction().context.get('shops'): - return Transaction().context.get('shops') + return Transaction().context.get('shops') else: - return [] - + return [] diff --git a/party.xml b/party.xml index 2f4c038..e5c6732 100644 --- a/party.xml +++ b/party.xml @@ -3,11 +3,6 @@ this repository contains the full copyright notices and license terms. --> - - party.party - - party_tree - party.party diff --git a/purchase.py b/purchase.py index 064d67b..c565044 100644 --- a/purchase.py +++ b/purchase.py @@ -7,7 +7,6 @@ from trytond.model import fields from trytond.transaction import Transaction from trytond.pool import Pool, PoolMeta from trytond.pyson import Bool, Eval -from trytond.exceptions import UserError __all__ = ['Purchase', 'PurchaseLine'] @@ -15,13 +14,14 @@ __all__ = ['Purchase', 'PurchaseLine'] class Purchase(metaclass=PoolMeta): __name__ = 'purchase.purchase' shop = fields.Many2One('purchase.shop', 'Shop', required=True, domain=[ - ('id', 'in', Eval('context', {}).get('shops', [])), - ], + ('id', 'in', Eval('context', {}).get('shops', [])), + ], states={ 'readonly': (Eval('state') != 'draft') | Bool(Eval('number')), - }, depends=['number', 'state']) + }, depends=['number', 'state']) shop_address = fields.Function(fields.Many2One('party.address', - 'Shop Address'), 'on_change_with_shop_address') + 'Shop Address'), + 'on_change_with_shop_address') @classmethod def __setup__(cls): @@ -77,7 +77,6 @@ class Purchase(metaclass=PoolMeta): @classmethod def default_price_list(cls): - raise UserError(str(cls)) shop = cls.current_shop() if not shop or not shop.price_list: return @@ -89,7 +88,7 @@ class Purchase(metaclass=PoolMeta): if not shop or not shop.address: return return shop.address.id - + @fields.depends('shop', 'party') def on_change_shop(self): if not self.shop: @@ -105,7 +104,7 @@ class Purchase(metaclass=PoolMeta): @fields.depends('shop') def on_change_with_shop_address(self, name=None): return (self.shop and self.shop.address and - self.shop.address.id or None) + self.shop.address.id or None) @fields.depends('shop') def on_change_party(self): @@ -117,7 +116,8 @@ class Purchase(metaclass=PoolMeta): @classmethod def set_number(cls, purchases): ''' - Fill the reference field with the purchase shop or purchase config sequence + Fill the reference field with the purchase + shop or purchase config sequence ''' for purchase in purchases: if purchase.number: @@ -128,15 +128,14 @@ class Purchase(metaclass=PoolMeta): super().set_number(purchases) - class PurchaseLine(metaclass=PoolMeta): __name__ = 'purchase.line' - - + @fields.depends('product', 'unit', 'quantity', 'purchase', '_parent_purchase.party', 'product_supplier', '_parent_purchase.shop', - methods=['_get_tax_rule_pattern', '_get_context_purchase_price']) + methods=['_get_tax_rule_pattern', + '_get_context_purchase_price']) def on_change_product(self): pool = Pool() Product = pool.get('product.product') @@ -172,16 +171,17 @@ class PurchaseLine(metaclass=PoolMeta): if self.purchase and self.purchase.party: product_suppliers = [ps for ps in self.product.product_suppliers - if ps.party == self.purchase.party] + if ps.party == self.purchase.party] if len(product_suppliers) == 1: self.product_supplier, = product_suppliers if (self.product_supplier and (self.product_supplier - not in self.product.product_suppliers)): + not in self.product.product_suppliers)): self.product_supplier = None with Transaction().set_context(self._get_context_purchase_price()): - self.unit_price = Product.get_purchase_price([self.product], + self.unit_price = Product.get_purchase_price( + [self.product], abs(self.quantity or 0))[self.product.id] if self.unit_price: self.unit_price = self.unit_price.quantize( diff --git a/setup.py b/setup.py index abfeb94..ed72eea 100644 --- a/setup.py +++ b/setup.py @@ -26,9 +26,10 @@ def get_require_version(name): else: require = '%s >= %s.%s, < %s.%s' require %= (name, major_version, minor_version, - major_version, minor_version + 1) + major_version, minor_version + 1) return require + config = ConfigParser() config.readfp(open('tryton.cfg')) info = dict(config.items('tryton')) @@ -54,26 +55,30 @@ if minor_version % 2: dependency_links.append('https://trydevpi.tryton.org/') setup(name='%s_%s' % (PREFIX, MODULE), - version=version, - description='Tryton Purchase Shop Module', - long_description=read('README'), - author='Alnus Tmp', - author_email='alnus@disroot.org', - url='https://git.disroot.org/Etrivial/', - download_url='https://git.disroot.org/Etrivial/trytond-%s' % MODULE, - keywords='', - package_dir={'trytond.modules.%s' % MODULE: '.'}, - packages=[ - 'trytond.modules.%s' % MODULE, - 'trytond.modules.%s.tests' % MODULE, - ], + version=version, + description='Tryton Purchase Shop Module', + long_description=read('README'), + author='Alnus Tmp', + author_email='alnus@disroot.org', + url='https://git.disroot.org/Etrivial/', + download_url='https://git.disroot.org/Etrivial/trytond-%s' % MODULE, + keywords='', + package_dir={'trytond.modules.%s' % MODULE: '.'}, + packages=[ + 'trytond.modules.%s' % MODULE, + 'trytond.modules.%s.tests' % MODULE, +], package_data={ - 'trytond.modules.%s' % MODULE: (info.get('xml', []) - + ['tryton.cfg', 'view/*.xml', 'locale/*.po', '*.odt', - 'icons/*.svg', 'tests/*.rst']), - }, + 'trytond.modules.%s' % MODULE: (info.get('xml', []) + + ['tryton.cfg', + 'view/*.xml', + 'locale/*.po', + '*.odt', + 'icons/*.svg', + 'tests/*.rst']), +}, classifiers=[ - 'Development Status :: 5 - Production/Stable', + 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', 'Framework :: Tryton', 'Intended Audience :: Developers', @@ -101,7 +106,7 @@ setup(name='%s_%s' % (PREFIX, MODULE), 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Office/Business', - ], +], license='GPL-3', install_requires=requires, dependency_links=dependency_links, @@ -115,6 +120,6 @@ setup(name='%s_%s' % (PREFIX, MODULE), tests_require=tests_require, use_2to3=True, convert_2to3_doctests=[ - 'tests/scenario_purchase_shop.rst', - ], - ) + 'tests/scenario_purchase_shop.rst', +], +) diff --git a/shop.py b/shop.py index dcaede6..ca42cea 100644 --- a/shop.py +++ b/shop.py @@ -2,84 +2,81 @@ # The COPYRIGHT file at the top level of this repository contains # the full copyright notices and license terms. from sql import Null, Table - from trytond.model import ModelView, ModelSQL, fields from trytond.pyson import If, Eval, Id from trytond.transaction import Transaction -from trytond.pool import Pool, PoolMeta +from trytond.pool import Pool from trytond import backend __all__ = ['PurchaseShop', 'PurchaseShopResUser', 'PurchaseShopParty'] _digits = (16, 2) + class PurchaseShop(ModelSQL, ModelView): 'Purchase Shop' __name__ = 'purchase.shop' - name = fields.Char('Shop Name', required=True, select=True) + name = fields.Char('Shop Name', required=True, ) users = fields.Many2Many('purchase.shop-res.user', 'shop', 'user', 'Users') address = fields.Many2One('party.address', 'Address', domain=[ - ('party', '=', Eval('company_party')), - ], depends=['company_party']) + ('party', '=', Eval('company_party')), + ], depends=['company_party']) warehouse = fields.Many2One('stock.location', "Warehouse", required=True, - domain=[('type', '=', 'warehouse')]) + domain=[('type', '=', 'warehouse')]) currency = fields.Many2One('currency.currency', 'Currency',) price_list = fields.Many2One('product.price_list', 'Price List') payment_term = fields.Many2One('account.invoice.payment_term', - 'Payment Term') + 'Payment Term') purchase_sequence = fields.Many2One( 'ir.sequence', 'Purchase Sequence', domain=[ ('company', 'in', [Eval('company', -1), None]), ('sequence_type', '=', Id('purchase', 'sequence_type_purchase')), - ], + ], depends=['company']) purchase_invoice_method = fields.Selection([ - (None, ''), - ('manual', 'Manual'), - ('order', 'On Order Processed'), - ('shipment', 'On Shipment Sent') - ], 'Purchase Invoice Method') + (None, ''), + ('manual', 'Manual'), + ('order', 'On Order Processed'), + ('shipment', 'On Shipment Sent') + ], 'Purchase Invoice Method') purchase_shipment_method = fields.Selection([ - (None, ''), - ('manual', 'Manual'), - ('order', 'On Order Processed'), - ('invoice', 'On Invoice Paid'), - ], 'Purchase Shipment Method') + (None, ''), + ('manual', 'Manual'), + ('order', 'On Order Processed'), + ('invoice', 'On Invoice Paid'), + ], 'Purchase Shipment Method') company = fields.Many2One('company.company', 'Company', required=True, - domain=[ - ('id', If(Eval('context', {}).contains('company'), '=', '!='), - Eval('context', {}).get('company', 0)), - ], select=True) + domain=[ + ('id', + If(Eval('context', {}).contains('company'), + '=', '!='), + Eval('context', {}).get('company', 0)), + ], ) company_party = fields.Function(fields.Many2One('party.party', - 'Company Party'), - 'on_change_with_company_party') - active = fields.Boolean('Active', select=True) - analytic_root = fields.Many2One('analytic_account.account','Analytic Root', required=True, - domain=[ - ('type', '=', 'root'), - ], - depends=['type'] - ) + 'Company Party'), + 'on_change_with_company_party') + active = fields.Boolean('Active', ) + analytic_root = fields.Many2One('analytic_account.account', + 'Analytic Root', required=True, + domain=[ + ('type', '=', 'root'), + ] + ) analytic_account = fields.Many2One('analytic_account.account', - 'Analytic Account', required=True, - domain=[ - ('type', '=', 'normal') - ], - depends=['analytic_root'] - ) + 'Analytic Account', required=True, + domain=[ + ('type', '=', 'normal') + ] + ) partys = fields.Many2Many('purchase.shop_party', 'shop', 'party', - 'Partys') + 'Partys') withholding_tax = fields.Many2One('account.tax', 'WithholdingTax', domain=[ ('rate', '<', 0), ('group.kind', '=', 'purchase'), - ], - depends=['rate', 'group']) - - default_performance_rate = fields.Numeric('Default Performance Rate', _digits) - - + ]) + invoice_subtype = fields.Many2One('account.invoice.subtype', "Subtype") @classmethod def __register__(cls, module_name): @@ -101,7 +98,8 @@ class PurchaseShop(ModelSQL, ModelView): if property_exist: property_ = Table('ir_property') purchase_sequence_exist = table_h.column_exist('purchase_sequence') - purchase_invoice_method_exist = table_h.column_exist('purchase_invoice_method') + purchase_invoice_method_exist = table_h.column_exist( + 'purchase_invoice_method') purchase_shipment_method_exist = table_h.column_exist( 'purchase_shipment_method') @@ -109,65 +107,66 @@ class PurchaseShop(ModelSQL, ModelView): if backend.name != 'sqlite': # SQLite doesn't support this query as it generates and update # with an alias (AS) which is not valid on SQLite - query = shop_table.update(columns=[shop_table.currency], + query = shop_table.update( + columns=[shop_table.currency], values=[company_table.currency], from_=[company_table], where=((shop_table.company == company_table.id) - & (shop_table.currency == Null))) + & (shop_table.currency == Null))) cursor.execute(*query) # Migration to remove Property if not purchase_sequence_exist and property_exist: cursor.execute(*property_ - .join(field, condition=property_.field == field.id) - .join(model, condition=field.model == model.id) - .select( - property_.res, - property_.value, - where=property_.res.like(cls.__name__ + ',%') - & (field.name == 'purchase_sequence') - & (model.model == cls.__name__))) + .join(field, condition=property_.field == field.id) + .join(model, condition=field.model == model.id) + .select( + property_.res, + property_.value, + where=property_.res.like(cls.__name__ + ',%') + & (field.name == 'purchase_sequence') + & (model.model == cls.__name__))) for res, value in cursor: id_ = int(res.split(',')[1]) value = int(value.split(',')[1]) if value else None update.execute(*table.update( - [table.purchase_sequence], - [value], - where=table.id == id_)) + [table.purchase_sequence], + [value], + where=table.id == id_)) if not purchase_invoice_method_exist and property_exist: cursor.execute(*property_ - .join(field, condition=property_.field == field.id) - .join(model, condition=field.model == model.id) - .select( - property_.res, - property_.value, - where=property_.res.like(cls.__name__ + ',%') - & (field.name == 'purchase_invoice_method') - & (model.model == cls.__name__))) + .join(field, condition=property_.field == field.id) + .join(model, condition=field.model == model.id) + .select( + property_.res, + property_.value, + where=property_.res.like(cls.__name__ + ',%') + & (field.name == 'purchase_invoice_method') + & (model.model == cls.__name__))) for res, value in cursor: id_ = int(res.split(',')[1]) value = value.split(',')[1] if value else None update.execute(*table.update( - [table.purchase_invoice_method], - [value], - where=table.id == id_)) + [table.purchase_invoice_method], + [value], + where=table.id == id_)) if not purchase_shipment_method_exist and property_exist: cursor.execute(*property_ - .join(field, condition=property_.field == field.id) - .join(model, condition=field.model == model.id) - .select( - property_.res, - property_.value, - where=property_.res.like(cls.__name__ + ',%') - & (field.name == 'purchase_shipment_method') - & (model.model == cls.__name__))) + .join(field, condition=property_.field == field.id) + .join(model, condition=field.model == model.id) + .select( + property_.res, + property_.value, + where=property_.res.like(cls.__name__ + ',%') + & (field.name == 'purchase_shipment_method') + & (model.model == cls.__name__))) for res, value in cursor: id_ = int(res.split(',')[1]) value = value.split(',')[1] if value else None update.execute(*table.update( - [table.purchase_shipment_method], - [value], - where=table.id == id_)) + [table.purchase_shipment_method], + [value], + where=table.id == id_)) # Migration from 5.2: do not require price_list table_h.not_null_action('price_list', action='remove') @@ -203,15 +202,6 @@ class PurchaseShop(ModelSQL, ModelView): config = Config(1) return config - @staticmethod - def default_performance_rate(): - Config = Pool().get('purchase.configuration') - config = Config(1) - - if config.default_performance_rate: - return config.default_performance_rate - - @fields.depends('company') def on_change_with_company_party(self, name=None): if self.company and self.company.party: @@ -225,16 +215,15 @@ class PurchaseShopResUser(ModelSQL): _table = 'purchase_shop_res_user' shop = fields.Many2One('purchase.shop', 'Shop', ondelete='CASCADE', - select=True, required=True) + required=True) user = fields.Many2One('res.user', 'User', ondelete='RESTRICT', - required=True) + required=True) class PurchaseShopParty(ModelSQL): 'Purchase Schop Party' __name__ = 'purchase.shop_party' shop = fields.Many2One('purchase.shop', 'Shop', ondelete='CASCADE', - select=True, required=True) + required=True) party = fields.Many2One('party.party', 'Party', ondelete='CASCADE', required=True) - diff --git a/stock.py b/stock.py index 5693ce8..6e13200 100644 --- a/stock.py +++ b/stock.py @@ -12,8 +12,8 @@ class ShipmentOut(metaclass=PoolMeta): __name__ = 'stock.shipment.out' shop_addresses = fields.Function(fields.Many2Many('party.address', None, - None, 'Shop Addresses'), - 'on_change_with_shop_addresses') + None, 'Shop Addresses'), + 'on_change_with_shop_addresses') @classmethod def __setup__(cls): @@ -24,13 +24,13 @@ class ShipmentOut(metaclass=PoolMeta): 'OR', delivery_addr_domain, [('id', 'in', Eval('shop_addresses'))], - ] + ] else: cls.delivery_address.domain = [ ('id', 'in', Eval('shop_addresses')), - ] + ] if 'shop_addresses' not in cls.delivery_address.depends: - cls.delivery_address.depends.append('shop_addresses') + cls.delivery_address.depends.add('shop_addresses') @fields.depends('warehouse') def on_change_with_shop_addresses(self, name=None): @@ -38,8 +38,8 @@ class ShipmentOut(metaclass=PoolMeta): if not self.warehouse: return [] warehouse_shops = Shop.search([ - ('warehouse', '=', self.warehouse.id), - ]) + ('warehouse', '=', self.warehouse.id), + ]) return [s.address.id for s in warehouse_shops if s.address] @@ -47,25 +47,25 @@ class ShipmentOutReturn(metaclass=PoolMeta): __name__ = 'stock.shipment.out.return' shop_addresses = fields.Function(fields.Many2Many('party.address', None, - None, 'Shop Addresses'), - 'on_change_with_shop_addresses') + None, 'Shop Addresses'), + 'on_change_with_shop_addresses') @classmethod def __setup__(cls): super(ShipmentOutReturn, cls).__setup__() - delivery_addr_domain = cls.delivery_address.domain[:] - if delivery_addr_domain: - cls.delivery_address.domain = [ + contact_addr_domain = cls.contact_address.domain[:] + if contact_addr_domain: + cls.contact_address.domain = [ 'OR', - delivery_addr_domain, + contact_addr_domain, [('id', 'in', Eval('shop_addresses'))], - ] + ] else: cls.delivery_address.domain = [ ('id', 'in', Eval('shop_addresses')), - ] - if 'shop_addresses' not in cls.delivery_address.depends: - cls.delivery_address.depends.append('shop_addresses') + ] + if 'shop_addresses' not in cls.contact_address.depends: + cls.contact_address.depends.add('shop_addresses') @fields.depends('warehouse') def on_change_with_shop_addresses(self, name=None): @@ -73,6 +73,6 @@ class ShipmentOutReturn(metaclass=PoolMeta): if not self.warehouse: return [] warehouse_shops = Shop.search([ - ('warehouse', '=', self.warehouse.id), - ]) + ('warehouse', '=', self.warehouse.id), + ]) return [s.address.id for s in warehouse_shops if s.address] diff --git a/tests/__init__.py b/tests/__init__.py index 0eb1e2a..f2e9088 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,9 +1,3 @@ # This file is part sale_shop module for Tryton. # The COPYRIGHT file at the top level of this repository contains the full # copyright notices and license terms. -try: - from trytond.modules.sale_shop.tests.test_sale_shop import suite -except ImportError: - from .test_sale_shop import suite - -__all__ = ['suite'] diff --git a/tests/scenario_sale_shop.rst b/tests/scenario_sale_shop.rst index a5116f8..54b08d5 100644 --- a/tests/scenario_sale_shop.rst +++ b/tests/scenario_sale_shop.rst @@ -1,5 +1,5 @@ ================== -Sale Shop Scenario +Purchase Shop Scenario ================== Imports:: @@ -14,12 +14,12 @@ Imports:: ... create_chart, get_accounts, create_tax >>> from trytond.modules.account_invoice.tests.tools import \ ... set_fiscalyear_invoice_sequences, create_payment_term - >>> from trytond.modules.sale_shop.tests.tools import create_shop + >>> from trytond.modules.purchase_shop.tests.tools import create_shop >>> today = datetime.date.today() -Install sale:: +Install purchase:: - >>> config = activate_modules('sale_shop') + >>> config = activate_modules('purchase_shop') Create company:: @@ -114,12 +114,12 @@ Create an Inventory:: >>> inventory.state == 'done' True -Create Sale Shop:: +Create Purchase Shop:: >>> shop = create_shop(payment_term, product_price_list) >>> shop.save() -Save Sale Shop User:: +Save Purchase Shop User:: >>> User = Model.get('res.user') >>> user, = User.find([]) @@ -128,22 +128,22 @@ Save Sale Shop User:: >>> user.save() >>> set_user(user) -Sale 5 products:: +Purchase 5 products:: - >>> Sale = Model.get('sale.sale') - >>> SaleLine = Model.get('sale.line') - >>> sale = Sale() - >>> sale.party = customer - >>> sale.payment_term = payment_term - >>> sale.invoice_method = 'shipment' - >>> sale_line = SaleLine() - >>> sale.lines.append(sale_line) - >>> sale_line.product = product - >>> sale_line.quantity = 2.0 - >>> sale_line = SaleLine() - >>> sale.lines.append(sale_line) - >>> sale_line.product = product - >>> sale_line.quantity = 3.0 - >>> sale.save() - >>> sale.state == 'draft' + >>> Purchase = Model.get('purchase.purchase') + >>> PurchaseLine = Model.get('purchase.line') + >>> purchase = Purchase() + >>> purchase.party = customer + >>> purchase.payment_term = payment_term + >>> purchase.invoice_method = 'shipment' + >>> purchase_line = PurchaseLine() + >>> purchase.lines.append(purchase_line) + >>> purchase_line.product = product + >>> purchase_line.quantity = 2.0 + >>> purchase_line = PurchaseLine() + >>> purchase.lines.append(purchase_line) + >>> purchase_line.product = product + >>> purchase_line.quantity = 3.0 + >>> purchase.save() + >>> purchase.state == 'draft' True diff --git a/tests/test_purchase_shop.py b/tests/test_purchase_shop.py new file mode 100644 index 0000000..663ecab --- /dev/null +++ b/tests/test_purchase_shop.py @@ -0,0 +1,12 @@ +# This file is part of the sale_shop module for 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 PurchaseShopTestCase(ModuleTestCase): + 'Test Sale Shop module' + module = 'purchase_shop' + + +del ModuleTestCase diff --git a/tests/test_sale_shop.py b/tests/test_sale_shop.py deleted file mode 100644 index 0cf8cb7..0000000 --- a/tests/test_sale_shop.py +++ /dev/null @@ -1,26 +0,0 @@ -# This file is part of the sale_shop module for Tryton. -# The COPYRIGHT file at the top level of this repository contains the full -# copyright notices and license terms. -import unittest -import doctest -import trytond.tests.test_tryton -from trytond.tests.test_tryton import ModuleTestCase -from trytond.tests.test_tryton import doctest_teardown -from trytond.tests.test_tryton import doctest_checker - - -class SaleShopTestCase(ModuleTestCase): - 'Test Sale Shop module' - module = 'sale_shop' - - -def suite(): - suite = trytond.tests.test_tryton.suite() - suite.addTests(unittest.TestLoader().loadTestsFromTestCase( - SaleShopTestCase)) - suite.addTests(doctest.DocFileSuite( - 'scenario_sale_shop.rst', - tearDown=doctest_teardown, encoding='utf-8', - checker=doctest_checker, - optionflags=doctest.REPORT_ONLY_FIRST_FAILURE)) - return suite diff --git a/tests/tools.py b/tests/tools.py index b5eee65..5a4be31 100644 --- a/tests/tools.py +++ b/tests/tools.py @@ -7,7 +7,7 @@ __all__ = ['create_shop'] def create_shop(payment_term, product_price_list, name=None, warehouse=None, - sequence=None, config=None): + sequence=None, config=None): "Create a sale shop" Shop = Model.get('sale.shop', config=config) Sequence = Model.get('ir.sequence', config=config) @@ -20,14 +20,14 @@ def create_shop(payment_term, product_price_list, name=None, warehouse=None, if not warehouse: warehouse, = Location.find([ ('type', '=', 'warehouse'), - ]) + ]) shop.warehouse = warehouse shop.price_list = product_price_list shop.payment_term = payment_term if not sequence: sequence, = Sequence.find([ ('name', '=', 'Sale'), - ]) + ]) shop.sale_sequence = sequence shop.sale_invoice_method = 'shipment' shop.sale_shipment_method = 'order' diff --git a/tryton.cfg b/tryton.cfg index fc8d266..f1f4ef6 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -1,11 +1,13 @@ [tryton] -version=6.0.0 +version=6.8.0 depends: ir res purchase_price_list analytic_purchase account + account_invoice_subtype + party xml: shop.xml purchase.xml diff --git a/view/purchase_shop_form.xml b/view/purchase_shop_form.xml index 76b6fa6..3d0ee2c 100644 --- a/view/purchase_shop_form.xml +++ b/view/purchase_shop_form.xml @@ -18,8 +18,6 @@ The COPYRIGHT file at the top level of this repository contains the full copyrig