[tryton-debian-vcs] tryton-modules-purchase branch upstream-2.6 updated. upstream/2.6.3-1-g257f8f1
Mathias Behrle
tryton-debian-vcs at alioth.debian.org
Wed Dec 11 18:48:43 UTC 2013
The following commit has been merged in the upstream-2.6 branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-modules-purchase.git;a=commitdiff;h=upstream/2.6.3-1-g257f8f1
commit 257f8f1559b5ceb064673482108e11a743ac7d7a
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Wed Dec 11 19:22:59 2013 +0100
Adding upstream version 2.6.4.
diff --git a/CHANGELOG b/CHANGELOG
index 5ac8b2b..afcd5fc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.6.4 - 2013-12-04
+* Bug fixes (see mercurial logs for details)
+
Version 2.6.3 - 2013-10-01
* Bug fixes (see mercurial logs for details)
diff --git a/MANIFEST.in b/MANIFEST.in
index 97a9596..478d5ff 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -9,3 +9,4 @@ include *.xml
include *.odt
include locale/*.po
include doc/*
+include tests/*.rst
diff --git a/PKG-INFO b/PKG-INFO
index f77119e..2eab12e 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: trytond_purchase
-Version: 2.6.3
+Version: 2.6.4
Summary: Tryton module for purchase
Home-page: http://www.tryton.org/
Author: Tryton
diff --git a/setup.py b/setup.py
index 551b517..3e6eb20 100644
--- a/setup.py
+++ b/setup.py
@@ -45,7 +45,7 @@ setup(name='trytond_purchase',
],
package_data={
'trytond.modules.purchase': info.get('xml', []) \
- + ['tryton.cfg', 'locale/*.po', 'purchase.odt'],
+ + ['tryton.cfg', 'locale/*.po', 'tests/*.rst', 'purchase.odt'],
},
classifiers=[
'Development Status :: 5 - Production/Stable',
diff --git a/tests/scenario_purchase.rst b/tests/scenario_purchase.rst
new file mode 100644
index 0000000..99165af
--- /dev/null
+++ b/tests/scenario_purchase.rst
@@ -0,0 +1,450 @@
+=================
+Purchase Scenario
+=================
+
+Imports::
+
+ >>> import datetime
+ >>> from dateutil.relativedelta import relativedelta
+ >>> from decimal import Decimal
+ >>> from operator import attrgetter
+ >>> from proteus import config, Model, Wizard
+ >>> today = datetime.date.today()
+
+Create database::
+
+ >>> config = config.set_trytond()
+ >>> config.pool.test = True
+
+Install purchase::
+
+ >>> Module = Model.get('ir.module.module')
+ >>> purchase_module, = Module.find([('name', '=', 'purchase')])
+ >>> Module.install([purchase_module.id], config.context)
+ >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
+
+Create company::
+
+ >>> Currency = Model.get('currency.currency')
+ >>> CurrencyRate = Model.get('currency.currency.rate')
+ >>> currencies = Currency.find([('code', '=', 'EUR')])
+ >>> if not currencies:
+ ... currency = Currency(name='Euro', symbol=u'€', code='EUR',
+ ... rounding=Decimal('0.01'), mon_grouping='[3, 3, 0]',
+ ... mon_decimal_point=',')
+ ... currency.save()
+ ... CurrencyRate(date=today + relativedelta(month=1, day=1),
+ ... rate=Decimal('1.0'), currency=currency).save()
+ ... else:
+ ... currency, = currencies
+ >>> Company = Model.get('company.company')
+ >>> company_config = Wizard('company.company.config')
+ >>> company_config.execute('company')
+ >>> company = company_config.form
+ >>> company.name = 'B2CK'
+ >>> company.currency = currency
+ >>> company_config.execute('add')
+ >>> company, = Company.find([])
+
+Reload the context::
+
+ >>> User = Model.get('res.user')
+ >>> config._context = User.get_preferences(True, config.context)
+
+Create fiscal year::
+
+ >>> FiscalYear = Model.get('account.fiscalyear')
+ >>> Sequence = Model.get('ir.sequence')
+ >>> SequenceStrict = Model.get('ir.sequence.strict')
+ >>> fiscalyear = FiscalYear(name=str(today.year))
+ >>> fiscalyear.start_date = today + relativedelta(month=1, day=1)
+ >>> fiscalyear.end_date = today + relativedelta(month=12, day=31)
+ >>> fiscalyear.company = company
+ >>> post_move_seq = Sequence(name=str(today.year), code='account.move',
+ ... company=company)
+ >>> post_move_seq.save()
+ >>> fiscalyear.post_move_sequence = post_move_seq
+ >>> invoice_seq = SequenceStrict(name=str(today.year),
+ ... code='account.invoice', company=company)
+ >>> invoice_seq.save()
+ >>> fiscalyear.out_invoice_sequence = invoice_seq
+ >>> fiscalyear.in_invoice_sequence = invoice_seq
+ >>> fiscalyear.out_credit_note_sequence = invoice_seq
+ >>> fiscalyear.in_credit_note_sequence = invoice_seq
+ >>> fiscalyear.save()
+ >>> FiscalYear.create_period([fiscalyear.id], config.context)
+
+Create chart of accounts::
+
+ >>> AccountTemplate = Model.get('account.account.template')
+ >>> Account = Model.get('account.account')
+ >>> account_template, = AccountTemplate.find([('parent', '=', False)])
+ >>> create_chart = Wizard('account.create_chart')
+ >>> create_chart.execute('account')
+ >>> create_chart.form.account_template = account_template
+ >>> create_chart.form.company = company
+ >>> create_chart.execute('create_account')
+ >>> receivable, = Account.find([
+ ... ('kind', '=', 'receivable'),
+ ... ('company', '=', company.id),
+ ... ])
+ >>> payable, = Account.find([
+ ... ('kind', '=', 'payable'),
+ ... ('company', '=', company.id),
+ ... ])
+ >>> revenue, = Account.find([
+ ... ('kind', '=', 'revenue'),
+ ... ('company', '=', company.id),
+ ... ])
+ >>> expense, = Account.find([
+ ... ('kind', '=', 'expense'),
+ ... ('company', '=', company.id),
+ ... ])
+ >>> create_chart.form.account_receivable = receivable
+ >>> create_chart.form.account_payable = payable
+ >>> create_chart.execute('create_properties')
+
+Create parties::
+
+ >>> Party = Model.get('party.party')
+ >>> supplier = Party(name='Supplier')
+ >>> supplier.save()
+ >>> customer = Party(name='Customer')
+ >>> customer.save()
+
+Create product::
+
+ >>> ProductUom = Model.get('product.uom')
+ >>> unit, = ProductUom.find([('name', '=', 'Unit')])
+ >>> Product = Model.get('product.product')
+ >>> product = Product()
+ >>> product.name = 'product'
+ >>> product.default_uom = unit
+ >>> product.type = 'goods'
+ >>> product.purchasable = True
+ >>> product.salable = True
+ >>> product.list_price = Decimal('10')
+ >>> product.cost_price = Decimal('5')
+ >>> product.cost_price_method = 'fixed'
+ >>> product.account_expense = expense
+ >>> product.account_revenue = revenue
+ >>> product.save()
+
+Create payment term::
+
+ >>> PaymentTerm = Model.get('account.invoice.payment_term')
+ >>> PaymentTermLine = Model.get('account.invoice.payment_term.line')
+ >>> payment_term = PaymentTerm(name='Direct')
+ >>> payment_term_line = PaymentTermLine(type='remainder', days=0)
+ >>> payment_term.lines.append(payment_term_line)
+ >>> payment_term.save()
+
+Create an Inventory::
+
+ >>> Inventory = Model.get('stock.inventory')
+ >>> InventoryLine = Model.get('stock.inventory.line')
+ >>> Location = Model.get('stock.location')
+ >>> storage, = Location.find([
+ ... ('code', '=', 'STO'),
+ ... ])
+ >>> inventory = Inventory()
+ >>> inventory.location = storage
+ >>> inventory.save()
+ >>> inventory_line = InventoryLine(product=product, inventory=inventory)
+ >>> inventory_line.quantity = 100.0
+ >>> inventory_line.expected_quantity = 0.0
+ >>> inventory.save()
+ >>> inventory_line.save()
+ >>> Inventory.confirm([inventory.id], config.context)
+ >>> inventory.state
+ u'done'
+
+Purchase 5 products::
+
+ >>> Purchase = Model.get('purchase.purchase')
+ >>> PurchaseLine = Model.get('purchase.line')
+ >>> purchase = Purchase()
+ >>> purchase.party = supplier
+ >>> purchase.payment_term = payment_term
+ >>> purchase.invoice_method = 'order'
+ >>> 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.type = 'comment'
+ >>> purchase_line.description = 'Comment'
+ >>> purchase_line = PurchaseLine()
+ >>> purchase.lines.append(purchase_line)
+ >>> purchase_line.product = product
+ >>> purchase_line.quantity = 3.0
+ >>> purchase.save()
+ >>> Purchase.quote([purchase.id], config.context)
+ >>> Purchase.confirm([purchase.id], config.context)
+ >>> purchase.state
+ u'confirmed'
+ >>> purchase.reload()
+ >>> len(purchase.moves), len(purchase.shipment_returns), len(purchase.invoices)
+ (2, 0, 1)
+
+Purchase 5 products with an invoice method 'on shipment'::
+
+ >>> purchase = Purchase()
+ >>> purchase.party = supplier
+ >>> 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.type = 'comment'
+ >>> purchase_line.description = 'Comment'
+ >>> purchase_line = PurchaseLine()
+ >>> purchase.lines.append(purchase_line)
+ >>> purchase_line.product = product
+ >>> purchase_line.quantity = 3.0
+ >>> purchase.save()
+ >>> Purchase.quote([purchase.id], config.context)
+ >>> Purchase.confirm([purchase.id], config.context)
+ >>> purchase.state
+ u'confirmed'
+ >>> purchase.reload()
+ >>> len(purchase.moves), len(purchase.shipment_returns), len(purchase.invoices)
+ (2, 0, 0)
+
+Validate Shipments::
+
+ >>> Move = Model.get('stock.move')
+ >>> ShipmentIn = Model.get('stock.shipment.in')
+ >>> shipment = ShipmentIn()
+ >>> shipment.supplier = supplier
+ >>> for move in purchase.moves:
+ ... incoming_move = Move(id=move.id)
+ ... shipment.incoming_moves.append(incoming_move)
+ >>> shipment.save()
+ >>> ShipmentIn.receive([shipment.id], config.context)
+ >>> ShipmentIn.done([shipment.id], config.context)
+ >>> purchase.reload()
+ >>> len(purchase.shipments), len(purchase.shipment_returns)
+ (1, 0)
+
+Open supplier invoice::
+
+ >>> purchase.reload()
+ >>> Invoice = Model.get('account.invoice')
+ >>> invoice, = purchase.invoices
+ >>> invoice.type
+ u'in_invoice'
+ >>> len(invoice.lines)
+ 2
+ >>> Invoice.open([invoice.id], config.context)
+ >>> invoice.reload()
+ >>> invoice.state
+ u'open'
+ >>> payable.reload()
+ >>> (payable.debit, payable.credit) == \
+ ... (Decimal('0.00'), Decimal('25.00'))
+ True
+ >>> expense.reload()
+ >>> (expense.debit, expense.credit) == \
+ ... (Decimal('25.00'), Decimal('0.00'))
+ True
+
+Create a Return::
+
+ >>> return_ = Purchase()
+ >>> return_.party = supplier
+ >>> return_.payment_term = payment_term
+ >>> return_.invoice_method = 'shipment'
+ >>> return_line = PurchaseLine()
+ >>> return_.lines.append(return_line)
+ >>> return_line.product = product
+ >>> return_line.quantity = -4.
+ >>> return_line = PurchaseLine()
+ >>> return_.lines.append(return_line)
+ >>> return_line.type = 'comment'
+ >>> return_line.description = 'Comment'
+ >>> return_.save()
+ >>> Purchase.quote([return_.id], config.context)
+ >>> Purchase.confirm([return_.id], config.context)
+ >>> return_.state
+ u'confirmed'
+ >>> return_.reload()
+ >>> (len(return_.shipments), len(return_.shipment_returns),
+ ... len(return_.invoices))
+ (0, 1, 0)
+
+Check Return Shipments::
+
+ >>> return_.reload()
+ >>> ShipmentReturn = Model.get('stock.shipment.in.return')
+ >>> ship_return, = return_.shipment_returns
+ >>> ship_return.state
+ u'waiting'
+ >>> move_return, = ship_return.moves
+ >>> move_return.product.name
+ u'product'
+ >>> move_return.quantity
+ 4.0
+ >>> ShipmentReturn.assign_try([ship_return.id], config.context)
+ True
+ >>> ShipmentReturn.done([ship_return.id], config.context)
+ >>> ship_return.reload()
+ >>> ship_return.state
+ u'done'
+
+Open supplier credit note::
+
+ >>> return_.reload()
+ >>> credit_note, = return_.invoices
+ >>> credit_note.type
+ u'in_credit_note'
+ >>> len(credit_note.lines)
+ 1
+ >>> Invoice.open([credit_note.id], config.context)
+ >>> credit_note.reload()
+ >>> credit_note.state
+ u'open'
+ >>> payable.reload()
+ >>> (payable.debit, payable.credit) == (Decimal(20), Decimal(25))
+ True
+ >>> expense.reload()
+ >>> (expense.debit, expense.credit) == (Decimal(25), Decimal(20))
+ True
+
+Mixing return and purchase::
+
+ >>> mix = Purchase()
+ >>> mix.party = supplier
+ >>> mix.payment_term = payment_term
+ >>> mix.invoice_method = 'order'
+ >>> mixline = PurchaseLine()
+ >>> mix.lines.append(mixline)
+ >>> mixline.product = product
+ >>> mixline.quantity = 7.
+ >>> mixline_comment = PurchaseLine()
+ >>> mix.lines.append(mixline_comment)
+ >>> mixline_comment.type = 'comment'
+ >>> mixline_comment.description = 'Comment'
+ >>> mixline2 = PurchaseLine()
+ >>> mix.lines.append(mixline2)
+ >>> mixline2.product = product
+ >>> mixline2.quantity = -2.
+ >>> mix.save()
+ >>> Purchase.quote([mix.id], config.context)
+ >>> Purchase.confirm([mix.id], config.context)
+ >>> mix.state
+ u'confirmed'
+ >>> mix.reload()
+ >>> len(mix.moves), len(mix.shipment_returns), len(mix.invoices)
+ (2, 1, 2)
+
+Checking Shipments::
+
+ >>> mix.reload()
+ >>> mix_returns, = mix.shipment_returns
+ >>> mix_shipments = ShipmentIn()
+ >>> mix_shipments.supplier = supplier
+ >>> for move in mix.moves:
+ ... if move.id in [m.id for m in mix_returns.moves]:
+ ... continue
+ ... incoming_move = Move(id=move.id)
+ ... mix_shipments.incoming_moves.append(incoming_move)
+ >>> mix_shipments.save()
+ >>> ShipmentIn.receive([mix_shipments.id], config.context)
+ >>> ShipmentIn.done([mix_shipments.id], config.context)
+ >>> mix.reload()
+ >>> len(mix.shipments)
+ 1
+
+ >>> ShipmentReturn.wait([mix_returns.id], config.context)
+ >>> ShipmentReturn.assign_try([mix_returns.id], config.context)
+ True
+ >>> ShipmentReturn.done([mix_returns.id], config.context)
+ >>> move_return, = mix_returns.moves
+ >>> move_return.product.name
+ u'product'
+ >>> move_return.quantity
+ 2.0
+
+Checking the invoice::
+
+ >>> mix.reload()
+ >>> mix_invoice, mix_credit_note = sorted(mix.invoices,
+ ... key=attrgetter('type'), reverse=True)
+ >>> mix_invoice.type, mix_credit_note.type
+ (u'in_invoice', u'in_credit_note')
+ >>> len(mix_invoice.lines), len(mix_credit_note.lines)
+ (1, 1)
+ >>> Invoice.open([mix_invoice.id], config.context)
+ >>> mix_invoice.reload()
+ >>> mix_invoice.state
+ u'open'
+ >>> Invoice.open([mix_credit_note.id], config.context)
+ >>> mix_credit_note.reload()
+ >>> mix_credit_note.state
+ u'open'
+ >>> payable.reload()
+ >>> (payable.debit, payable.credit) == (Decimal(30), Decimal(60))
+ True
+ >>> expense.reload()
+ >>> (expense.debit, expense.credit) == (Decimal(60), Decimal(30))
+ True
+
+Mixing stuff with an invoice method 'on shipment'::
+
+ >>> mix = Purchase()
+ >>> mix.party = supplier
+ >>> mix.payment_term = payment_term
+ >>> mix.invoice_method = 'shipment'
+ >>> mixline = PurchaseLine()
+ >>> mix.lines.append(mixline)
+ >>> mixline.product = product
+ >>> mixline.quantity = 6.
+ >>> mixline_comment = PurchaseLine()
+ >>> mix.lines.append(mixline_comment)
+ >>> mixline_comment.type = 'comment'
+ >>> mixline_comment.description = 'Comment'
+ >>> mixline2 = PurchaseLine()
+ >>> mix.lines.append(mixline2)
+ >>> mixline2.product = product
+ >>> mixline2.quantity = -3.
+ >>> mix.save()
+ >>> Purchase.quote([mix.id], config.context)
+ >>> Purchase.confirm([mix.id], config.context)
+ >>> mix.state
+ u'confirmed'
+ >>> mix.reload()
+ >>> len(mix.moves), len(mix.shipment_returns), len(mix.invoices)
+ (2, 1, 0)
+
+Checking Shipments::
+
+ >>> mix.reload()
+ >>> mix_returns, = mix.shipment_returns
+ >>> mix_shipments = ShipmentIn()
+ >>> mix_shipments.supplier = supplier
+ >>> for move in mix.moves:
+ ... if move.id in [m.id for m in mix_returns.moves]:
+ ... continue
+ ... incoming_move = Move(id=move.id)
+ ... mix_shipments.incoming_moves.append(incoming_move)
+ >>> mix_shipments.save()
+ >>> ShipmentIn.receive([mix_shipments.id], config.context)
+ >>> ShipmentIn.done([mix_shipments.id], config.context)
+ >>> mix.reload()
+ >>> len(mix.shipments)
+ 1
+
+ >>> ShipmentReturn.wait([mix_returns.id], config.context)
+ >>> ShipmentReturn.assign_try([mix_returns.id], config.context)
+ True
+ >>> ShipmentReturn.done([mix_returns.id], config.context)
+ >>> move_return, = mix_returns.moves
+ >>> move_return.product.name
+ u'product'
+ >>> move_return.quantity
+ 3.0
diff --git a/tryton.cfg b/tryton.cfg
index ef5e959..f564a49 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=2.6.3
+version=2.6.4
depends:
account
account_invoice
diff --git a/trytond_purchase.egg-info/PKG-INFO b/trytond_purchase.egg-info/PKG-INFO
index 3a40c9f..0d3ce40 100644
--- a/trytond_purchase.egg-info/PKG-INFO
+++ b/trytond_purchase.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: trytond-purchase
-Version: 2.6.3
+Version: 2.6.4
Summary: Tryton module for purchase
Home-page: http://www.tryton.org/
Author: Tryton
diff --git a/trytond_purchase.egg-info/SOURCES.txt b/trytond_purchase.egg-info/SOURCES.txt
index 8504cf4..e132d9d 100644
--- a/trytond_purchase.egg-info/SOURCES.txt
+++ b/trytond_purchase.egg-info/SOURCES.txt
@@ -31,6 +31,7 @@ locale/es_ES.po
locale/fr_FR.po
locale/nl_NL.po
locale/ru_RU.po
+tests/scenario_purchase.rst
trytond_purchase.egg-info/PKG-INFO
trytond_purchase.egg-info/SOURCES.txt
trytond_purchase.egg-info/dependency_links.txt
--
tryton-modules-purchase
More information about the tryton-debian-vcs
mailing list