Sanjay Gohel (Open ERP) has proposed merging
lp:~openerp-dev/openobject-addons/trunk-simplify_picking_invoice-sgo into
lp:openobject-addons.
Requested reviews:
OpenERP Core Team (openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-simplify_picking_invoice-sgo/+merge/96066
Hello,
I have done following works.
1. simplify picking and invoice policy for this I have create one field create
invoice and remove other two field order_policy and invoice_on. we have 3
selection field.create invoice worked with combination of invoice_on and itself.
2.Remove one selection postpaid which is no longer use. and also remove all
postpaid related code demo data and yml file.
3. rename invoice picking policy to picking ship for more understanding.
Thank You
sanjay Gohel
(SGO)
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-simplify_picking_invoice-sgo/+merge/96066
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-addons/trunk-simplify_picking_invoice-sgo.
=== modified file 'sale/__openerp__.py'
--- sale/__openerp__.py 2012-02-13 15:27:55 +0000
+++ sale/__openerp__.py 2012-03-06 06:47:20 +0000
@@ -91,7 +91,6 @@
'test/sale_order_demo.yml',
'test/picking_order_policy.yml',
'test/manual_order_policy.yml',
- 'test/postpaid_order_policy.yml',
'test/prepaid_order_policy.yml',
'test/cancel_order.yml',
'test/delete_order.yml',
=== modified file 'sale/sale.py'
--- sale/sale.py 2012-02-28 14:08:16 +0000
+++ sale/sale.py 2012-03-06 06:47:20 +0000
@@ -221,18 +221,16 @@
'incoterm': fields.many2one('stock.incoterms', 'Incoterm', help="Incoterm which stands for 'International Commercial terms' implies its a series of sales terms which are used in the commercial transaction."),
'picking_policy': fields.selection([('direct', 'Deliver each product when available'), ('one', 'Deliver all products at once')],
- 'Picking Policy', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="""If you don't have enough stock available to deliver all at once, do you accept partial shipments or not?"""),
+ 'Picking Ship', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="""If you don't have enough stock available to deliver all at once, do you accept partial shipments or not?"""),
'order_policy': fields.selection([
- ('prepaid', 'Pay before delivery'),
- ('manual', 'Deliver & invoice on demand'),
- ('picking', 'Invoice based on deliveries'),
- ('postpaid', 'Invoice on order after delivery'),
- ], 'Invoice Policy', required=True, readonly=True, states={'draft': [('readonly', False)]},
- help="""The Invoice Policy is used to synchronise invoice and delivery operations.
- - The 'Pay before delivery' choice will first generate the invoice and then generate the picking order after the payment of this invoice.
- - The 'Deliver & Invoice on demand' will create the picking order directly and wait for the user to manually click on the 'Invoice' button to generate the draft invoice based on the sale order or the sale order lines.
- - The 'Invoice on order after delivery' choice will generate the draft invoice based on sales order after all picking lists have been finished.
- - The 'Invoice based on deliveries' choice is used to create an invoice during the picking process."""),
+ ('prepaid', 'Before Delivery'),
+ ('manual', 'On Demand'),
+ ('picking', 'On Delivery Order'),
+ ], 'Create Invoice', required=True, readonly=True, states={'draft': [('readonly', False)]},
+ help="""The Create Invoice is used to synchronise invoice and delivery operations.
+ - The 'Before Delivery' choice will first generate the invoice and then generate the picking order after the payment of this invoice.
+ - The 'On Demand' will create the picking order directly and wait for the user to manually click on the 'Invoice' button to generate the draft invoice based on the sale order or the sale order lines.
+ - The 'On Delivery Order' choice will generate the draft invoice based on sales order after all picking lists have been finished."""),
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="Pricelist for current sales order."),
'project_id': fields.many2one('account.analytic.account', 'Contract/Analytic Account', readonly=True, states={'draft': [('readonly', False)]}, help="The analytic account related to a sales order."),
=== modified file 'sale/sale_demo.xml'
--- sale/sale_demo.xml 2011-12-19 16:54:40 +0000
+++ sale/sale_demo.xml 2012-03-06 06:47:20 +0000
@@ -61,42 +61,6 @@
<!--Resource: sale.order-->
- <record id="order2" model="sale.order">
- <field name="shop_id" ref="shop"/>
- <field model="product.pricelist" name="pricelist_id" search="[]"/>
- <field name="user_id" ref="base.user_demo"/>
- <field name="partner_id" ref="base.res_partner_2"/>
- <field name="partner_invoice_id" ref="base.res_partner_address_9"/>
- <field name="partner_shipping_id" ref="base.res_partner_address_9"/>
- <field name="partner_order_id" ref="base.res_partner_address_9"/>
- <field name="invoice_quantity">order</field>
- <field name="order_policy">postpaid</field>
-
- </record>
-
- <!--Resource: sale.order.line-->
-
- <record id="line3" model="sale.order.line">
- <field name="order_id" ref="order2"/>
- <field name="name">[PC2] Computer assembled on demand</field>
- <field name="product_id" ref="product.product_product_pc2"/>
- <field name="product_uom" ref="product.product_uom_unit"/>
- <field name="price_unit">540</field>
- <field name="type">make_to_order</field>
- </record>
- <record id="line4" model="sale.order.line">
- <field name="order_id" ref="order2"/>
- <field name="name">[MB1] Mainboard ASUStek (purchased on order)</field>
- <field name="product_id" ref="product.product_product_mb1"/>
- <field name="product_uom" ref="product.product_uom_unit"/>
- <field name="price_unit">88</field>
- <field name="product_uom_qty">8</field>
- <field name="product_uos_qty">8</field>
- <field name="type">make_to_order</field>
- </record>
-
- <!--Resource: sale.order-->
-
<record id="order3" model="sale.order">
<field name="shop_id" ref="shop"/>
<field model="product.pricelist" name="pricelist_id" search="[]"/>
=== modified file 'sale/sale_view.xml'
--- sale/sale_view.xml 2012-01-31 13:36:57 +0000
+++ sale/sale_view.xml 2012-03-06 06:47:20 +0000
@@ -222,7 +222,7 @@
<field name="incoterm" widget="selection"/>
<field name="picking_policy" required="True"/>
<field name="order_policy" on_change="shipping_policy_change(order_policy)"/>
- <field name="invoice_quantity" attrs="{'readonly':[('order_policy','in',('prepaid','picking'))]}"/>
+ <field name="invoice_quantity" invisible="True"/>
</group>
<group colspan="2" col="2">
<separator string="References" colspan="2"/>
=== modified file 'sale/sale_workflow.xml'
--- sale/sale_workflow.xml 2011-12-19 16:54:40 +0000
+++ sale/sale_workflow.xml 2012-03-06 06:47:20 +0000
@@ -172,7 +172,7 @@
<record id="trans_wait_invoice_invoice" model="workflow.transition">
<field name="act_from" ref="act_wait_invoice"/>
<field name="act_to" ref="act_invoice"/>
- <field name="condition">(order_policy=='prepaid') or ((order_policy=='postpaid') and shipped)</field>
+ <field name="condition">(order_policy=='prepaid')</field>
</record>
<record id="trans_wait_invoice_invoice_manual" model="workflow.transition">
=== removed file 'sale/test/postpaid_order_policy.yml'
--- sale/test/postpaid_order_policy.yml 2011-12-19 16:54:40 +0000
+++ sale/test/postpaid_order_policy.yml 1970-01-01 00:00:00 +0000
@@ -1,54 +0,0 @@
--
- Now I confirm the Quotation with "Invoice on order after delivery" policy.
--
- !workflow {model: sale.order, action: order_confirm, ref: order2}
--
- I check that related delivery order after confirmed.
--
- !python {model: sale.order}: |
- sale_order = self.browse(cr, uid, ref("order2"))
- assert sale_order.picking_ids, "Delivery Order should be created."
- assert len(sale_order.invoice_ids) == False, "Invoice should be not created."
--
- Now, I dispatch delivery order.
--
- !python {model: stock.partial.picking}: |
- order = self.pool.get('sale.order').browse(cr, uid, ref("order2"))
- for pick in order.picking_ids:
- data = pick.force_assign()
- if data == True:
- partial_id = self.create(cr, uid, {}, context={'active_model': 'stock.picking','active_ids': [pick.id]})
- self.do_partial(cr, uid, [partial_id])
--
- I open the invoice.
--
- !python {model: sale.order}: |
- import netsvc
- wf_service = netsvc.LocalService("workflow")
- order = self.browse(cr, uid, ref("order2"))
- #assert order.invoice_ids, "Invoice should be created after dispatch delivery order."
- for invoice in order.invoice_ids:
- wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr)
--
- I pay the invoice.
--
- !python {model: account.invoice}: |
- sale_order = self.pool.get('sale.order')
- order = sale_order.browse(cr, uid, ref("order2"))
- journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', order.company_id.id)], limit=1)
- for invoice in order.invoice_ids:
- invoice.pay_and_reconcile(
- invoice.amount_total, ref('account.cash'), ref('account.period_8'),
- journal_ids[0], ref('account.cash'),
- ref('account.period_8'), journal_ids[0],
- name='test')
--
- I check that an order has been invoiced, shipped and closed.
--
- !python {model: sale.order}: |
- order = self.browse(cr, uid, ref("order2"))
- assert order.picked_rate == 100, "Shipment progress is not 100%."
- #assert order.shipped, "Delivery Order should be dispatch." #TOFIX: procurement is gone in idle state so order never shipped, invoiced. after install mrp, it will be normal.
- #assert order.invoiced == True, "Sale order is not invoiced."
- #assert order.invoiced_rate == 100, "Invoiced progress is not 100%."
- #assert order.state == 'done', 'Order should be in closed.'
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp