diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py
index 1e4a674dd4c..9be6711a0a8 100644
--- a/addons/sale/__openerp__.py
+++ b/addons/sale/__openerp__.py
@@ -60,7 +60,12 @@
# 'process/sale_process.xml',
],
'demo_xml': ['sale_demo.xml'],
- 'test': ['test/sale_procurement.yml'],
+ 'test': [
+ 'test/shipping_manual_sale_order.yml',
+# 'test/prepaid_sale_order.yml',
+ 'test/advance_invoice.yml',
+ 'test/sale_procurement.yml',
+ ],
'installable': True,
'active': False,
'certificate': '0058103601429',
diff --git a/addons/sale/test/advance_invoice.yml b/addons/sale/test/advance_invoice.yml
new file mode 100644
index 00000000000..28535b2872c
--- /dev/null
+++ b/addons/sale/test/advance_invoice.yml
@@ -0,0 +1,330 @@
+-
+ In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer.
+-
+ I want to sell my mobile products to the customer with name Cleartrail
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_view0}:
+ close_method: none
+ code: View
+ name: View
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_income0}:
+ close_method: unreconciled
+ code: Income
+ name: Income
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_expense0}:
+ close_method: unreconciled
+ code: Expense
+ name: Expense
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_cash0}:
+ close_method: balance
+ code: Cash
+ name: Cash
+ sign: 1
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_minimalchart0}:
+ code: '0'
+ company_id: base.main_company
+ currency_mode: current
+ name: Minimal Chart
+ parent_left: 1
+ parent_right: 12
+ type: view
+ user_type: account_account_type_view0
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_payable1}:
+ code: AP
+ company_id: base.main_company
+ currency_mode: current
+ name: Payable
+ parent_id: account_account_minimalchart0
+ parent_left: 2
+ parent_right: 3
+ reconcile: true
+ type: payable
+ user_type: account_account_type_expense0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_receivable0}:
+ code: AR
+ company_id: base.main_company
+ currency_mode: current
+ name: Receivable
+ parent_id: account_account_minimalchart0
+ parent_left: 4
+ parent_right: 5
+ reconcile: true
+ type: receivable
+ user_type: account_account_type_income0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_cash0}:
+ code: C
+ company_id: base.main_company
+ currency_mode: current
+ name: Cash
+ parent_id: account_account_minimalchart0
+ parent_left: 6
+ parent_right: 7
+ type: other
+ user_type: account_account_type_cash0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_purchases0}:
+ code: P
+ company_id: base.main_company
+ currency_mode: current
+ name: Purchases
+ parent_id: account_account_minimalchart0
+ parent_left: 8
+ parent_right: 9
+ type: other
+ user_type: account_account_type_expense0
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_sales0}:
+ code: S
+ company_id: base.main_company
+ currency_mode: current
+ name: Sales
+ parent_id: account_account_minimalchart0
+ parent_left: 10
+ parent_right: 11
+ type: other
+ user_type: account_account_type_income0
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_purchasejournal0}:
+ code: PUJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_purchases0
+ default_debit_account_id: account_account_purchases0
+ name: Purchase Journal
+ sequence_id: account.sequence_purchase_journal
+ type: purchase
+ view_id: account.account_journal_view
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_salejournal0}:
+ code: SAJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_sales0
+ default_debit_account_id: account_account_sales0
+ name: Sale Journal
+ sequence_id: account.sequence_sale_journal
+ type: sale
+ view_id: account.account_journal_view
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_bankjournal0}:
+ code: BNK
+ company_id: base.main_company
+ default_credit_account_id: account_account_cash0
+ default_debit_account_id: account_account_cash0
+ name: Bank Journal
+ sequence_id: account.sequence_journal
+ type: cash
+ view_id: account.account_journal_bank_view
+
+
+-
+ Creating a ir.property record
+-
+ !record {model: ir.property, id: ir_property_propertyaccountexpensecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_payable
+ name: property_account_expense_categ
+ value_reference: account.account,5
+
+
+-
+ Creating a ir.property record
+-
+ !record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_receivable
+ name: property_account_income_categ
+ value_reference: account.account,6
+-
+ Creating a res.partner.category record
+-
+ !record {model: res.partner.category, id: res_partner_category_customers0}:
+ name: Customers
+-
+ Creating an res.partner record
+-
+ !record {model: res.partner, id: res_partner_cleartrail0}:
+ category_id:
+ - res_partner_category_customers0
+ name: Cleartrail
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_1}:
+ partner_id: res_partner_cleartrail0
+ street: onam plaza, 14 B palasia A B Road
+ type: contact
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_2}:
+ partner_id: res_partner_cleartrail0
+ type: invoice
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_3}:
+ partner_id: res_partner_cleartrail0
+ street: sangam house 15 B palasia, A B Road
+ type: delivery
+-
+ Customer Cleartrail has specific instrument requirements regarding the stockable products
+-
+ Creating an product.category record
+-
+ !record {model: product.category, id: product_category_allproductssellable0}:
+ name: Mobile Products Sellable
+
+
+-
+ Creating an product.category record
+-
+ !record {model: product.category, id: product_category_services0}:
+ name: Mobile Services
+-
+ Creating an product.template record
+-
+ !record {model: product.template, id: product_template_lgviewtysmart0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 170.0
+ mes_type: fixed
+ name: LG Viewty Smart
+ procure_method: make_to_order
+ standard_price: 160.0
+ supply_method: produce
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+
+-
+ Creating an product.product record
+-
+ !record {model: product.product, id: product_product_lgviewtysmart0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 170.0
+ mes_type: fixed
+ name: LG Viewty Smart
+ pricelist_purchase: 'Default Purchase Pricelist (0.00) : 160.00\n'
+ pricelist_sale: 'Public Pricelist (0.00) : 170.00\n'
+ procure_method: make_to_order
+ property_account_expense: sale.account_account_payable1
+ property_account_income: sale.account_account_receivable0
+ seller_delay: '1'
+ standard_price: 160.0
+ supply_method: produce
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ Creating a sale.order record
+-
+ !record {model: sale.order, id: sale_order_so0}:
+ date_order: '2010-05-03'
+ invoice_quantity: order
+ name: SO004
+ order_line:
+ - name: LG Viewty Smart
+ price_unit: 170.0
+ product_uom: product.product_uom_unit
+ product_uom_qty: 500.0
+ state: draft
+ delay: 7.0
+ product_id: sale.product_product_lgviewtysmart0
+ product_uos_qty: 500.0
+ th_weight: 0.0
+ type: make_to_order
+ order_policy: prepaid
+ partner_id: sale.res_partner_cleartrail0
+ partner_invoice_id: sale.res_partner_address_2
+ partner_order_id: sale.res_partner_address_1
+ partner_shipping_id: sale.res_partner_address_3
+ picking_policy: direct
+ pricelist_id: product.list0
+ shop_id: sale.shop
+
+-
+ Creating a sale.advance.payment.inv record
+-
+ !record {model: sale.advance.payment.inv, id: sale_advance_payment_inv_0}:
+ amount: 1000.0
+ product_id: product.product_product_pc3
+ qtty: 3.0
+
+
+-
+ Performing an osv_memory action create_invoices on module sale.advance.payment.inv
+-
+ !python {model: sale.advance.payment.inv}: |
+ self.create_invoices(cr, uid, [ref("sale_advance_payment_inv_0")], {"lang": 'en_US',
+ "active_model": 'sale.order', "active_ids": [ref("sale_order_so0")], "tz":
+ False, "active_id": ref("sale_order_so0"), })
+-
+ I will verify whether the invoice has been generated for SO since Shipping policy is 'Payment Before Delivery'
+-
+ !python {model: sale.order}: |
+ so = self.browse(cr, uid, ref("sale_order_so0"))
+ assert so.invoice_ids, "Invoices has not been generated for sale_order_so0"
+
+
\ No newline at end of file
diff --git a/addons/sale/test/prepaid_sale_order.yml b/addons/sale/test/prepaid_sale_order.yml
new file mode 100644
index 00000000000..d3299507bb2
--- /dev/null
+++ b/addons/sale/test/prepaid_sale_order.yml
@@ -0,0 +1,409 @@
+-
+ In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer.
+-
+ I want to sell my mobile products to the customer with name Cleartrail
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_view0}:
+ close_method: none
+ code: View
+ name: View
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_income0}:
+ close_method: unreconciled
+ code: Income
+ name: Income
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_expense0}:
+ close_method: unreconciled
+ code: Expense
+ name: Expense
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_cash0}:
+ close_method: balance
+ code: Cash
+ name: Cash
+ sign: 1
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_minimalchart0}:
+ code: '0'
+ company_id: base.main_company
+ currency_mode: current
+ name: Minimal Chart
+ parent_left: 1
+ parent_right: 12
+ type: view
+ user_type: account_account_type_view0
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_payable1}:
+ code: AP
+ company_id: base.main_company
+ currency_mode: current
+ name: Payable
+ parent_id: account_account_minimalchart0
+ parent_left: 2
+ parent_right: 3
+ reconcile: true
+ type: payable
+ user_type: account_account_type_expense0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_receivable0}:
+ code: AR
+ company_id: base.main_company
+ currency_mode: current
+ name: Receivable
+ parent_id: account_account_minimalchart0
+ parent_left: 4
+ parent_right: 5
+ reconcile: true
+ type: receivable
+ user_type: account_account_type_income0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_cash0}:
+ code: C
+ company_id: base.main_company
+ currency_mode: current
+ name: Cash
+ parent_id: account_account_minimalchart0
+ parent_left: 6
+ parent_right: 7
+ type: other
+ user_type: account_account_type_cash0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_purchases0}:
+ code: P
+ company_id: base.main_company
+ currency_mode: current
+ name: Purchases
+ parent_id: account_account_minimalchart0
+ parent_left: 8
+ parent_right: 9
+ type: other
+ user_type: account_account_type_expense0
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_sales0}:
+ code: S
+ company_id: base.main_company
+ currency_mode: current
+ name: Sales
+ parent_id: account_account_minimalchart0
+ parent_left: 10
+ parent_right: 11
+ type: other
+ user_type: account_account_type_income0
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_purchasejournal0}:
+ code: PUJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_purchases0
+ default_debit_account_id: account_account_purchases0
+ name: Purchase Journal
+ sequence_id: account.sequence_purchase_journal
+ type: purchase
+ view_id: account.account_journal_view
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_salejournal0}:
+ code: SAJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_sales0
+ default_debit_account_id: account_account_sales0
+ name: Sale Journal
+ sequence_id: account.sequence_sale_journal
+ type: sale
+ view_id: account.account_journal_view
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_bankjournal0}:
+ code: BNK
+ company_id: base.main_company
+ default_credit_account_id: account_account_cash0
+ default_debit_account_id: account_account_cash0
+ name: Bank Journal
+ sequence_id: account.sequence_journal
+ type: cash
+ view_id: account.account_journal_bank_view
+
+
+-
+ Creating a ir.property record
+-
+ !record {model: ir.property, id: ir_property_propertyaccountexpensecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_payable
+ name: property_account_expense_categ
+ value_reference: account.account,5
+
+
+-
+ Creating a ir.property record
+-
+ !record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_receivable
+ name: property_account_income_categ
+ value_reference: account.account,6
+-
+ Creating a res.partner.category record
+-
+ !record {model: res.partner.category, id: res_partner_category_customers0}:
+ name: Customers
+-
+ Creating an res.partner record
+-
+ !record {model: res.partner, id: res_partner_cleartrail0}:
+ category_id:
+ - res_partner_category_customers0
+ name: Cleartrail
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_1}:
+ partner_id: res_partner_cleartrail0
+ street: onam plaza, 14 B palasia A B Road
+ type: contact
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_2}:
+ partner_id: res_partner_cleartrail0
+ type: invoice
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_3}:
+ partner_id: res_partner_cleartrail0
+ street: sangam house 15 B palasia, A B Road
+ type: delivery
+-
+ Customer Cleartrail has specific instrument requirements regarding the stockable products
+-
+ Creating an product.category record
+-
+ !record {model: product.category, id: product_category_allproductssellable0}:
+ name: Mobile Products Sellable
+
+
+-
+ Creating an product.category record
+-
+ !record {model: product.category, id: product_category_services0}:
+ name: Mobile Services
+-
+ Creating an product.template record
+-
+ !record {model: product.template, id: product_template_lgviewtysmart0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 170.0
+ mes_type: fixed
+ name: LG Viewty Smart
+ procure_method: make_to_order
+ standard_price: 160.0
+ supply_method: produce
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+
+-
+ Creating an product.product record
+-
+ !record {model: product.product, id: product_product_lgviewtysmart0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 170.0
+ mes_type: fixed
+ name: LG Viewty Smart
+ pricelist_purchase: 'Default Purchase Pricelist (0.00) : 160.00\n'
+ pricelist_sale: 'Public Pricelist (0.00) : 170.00\n'
+ procure_method: make_to_order
+ property_account_expense: sale.account_account_payable1
+ property_account_income: sale.account_account_receivable0
+ seller_delay: '1'
+ standard_price: 160.0
+ supply_method: produce
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ Creating a sale.order record
+-
+ !record {model: sale.order, id: sale_order_so0}:
+ date_order: '2010-05-03'
+ invoice_quantity: order
+ name: SO004
+ order_line:
+ - name: LG Viewty Smart
+ price_unit: 170.0
+ product_uom: product.product_uom_unit
+ product_uom_qty: 500.0
+ state: draft
+ delay: 7.0
+ product_id: sale.product_product_lgviewtysmart0
+ product_uos_qty: 500.0
+ th_weight: 0.0
+ type: make_to_order
+ order_policy: prepaid
+ partner_id: sale.res_partner_cleartrail0
+ partner_invoice_id: sale.res_partner_address_2
+ partner_order_id: sale.res_partner_address_1
+ partner_shipping_id: sale.res_partner_address_3
+ picking_policy: direct
+ pricelist_id: product.list0
+ shop_id: sale.shop
+
+
+-
+ Performing a workflow action order_confirm on module sale.order
+-
+ !workflow {model: sale.order, action: order_confirm, ref: sale_order_so0}
+-
+ I will verify whether the invoice has been generated for SO since Shipping policy is 'Payment Before Delivery'
+-
+ !python {model: sale.order}: |
+ so = self.browse(cr, uid, ref("sale_order_so0"))
+ assert so.invoice_ids, "Invoices has not been generated for sale_order_so0"
+-
+ Performing a workflow action invoice_open on module account.invoice
+-
+ !python {model: account.invoice}: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ import netsvc
+ wf_service = netsvc.LocalService("workflow")
+ invoice_ids = so.invoice_ids
+ for invoice in invoice_ids:
+ wf_service.trg_validate(uid, 'account.invoice',invoice.id,'invoice_open', cr)
+-
+ Creating a account.invoice.pay record
+-
+ !record {model: account.invoice.pay, id: account_invoice_pay_tst0}:
+ amount: 85000.0
+ date: '2010-05-10'
+ journal_id: sale.account_journal_bankjournal0
+ name: tst
+ period_id: account.period_5
+-
+ Performing an osv_memory action wo_check on module account.invoice.pay
+-
+ !python {model: account.invoice.pay}: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ self.wo_check(cr, uid, [ref("account_invoice_pay_tst0")], {"lang": "en_US", "tz":
+ False, "active_model": 'account.invoice', "active_ids": [so.invoice_ids[0].id], "type":
+ "out_invoice", "active_id": so.invoice_ids[0].id, })
+
+
+-
+ Creating a account.invoice.pay.writeoff record
+-
+ !record {model: account.invoice.pay.writeoff, id: account_invoice_pay_writeoff_0}:
+ analytic_id: account.analytic_customers
+ comment: Write-Off
+ writeoff_acc_id: account.a_sale
+ writeoff_journal_id: sale.account_journal_bankjournal0
+
+
+-
+ Performing an osv_memory action pay_and_reconcile_writeoff on module account.invoice.pay.writeoff
+-
+ !python {model: account.invoice.pay.writeoff}: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ self.pay_and_reconcile_writeoff(cr, uid, [ref("account_invoice_pay_writeoff_0")],
+ {"lang": 'en_US', "tz": False, "active_model": 'account.invoice', "active_ids":
+ [so.invoice_ids[0].id], "type": "out_invoice", "active_id": so.invoice_ids[0].id })
+
+
+-
+ I will verify the picking associated with the sale order sale_order_so0
+-
+ !python {model: sale.order}: |
+ so = self.browse(cr, uid, ref("sale_order_so0"))
+ assert so.picking_ids,"Picking has not been generated for sale_order_so0"
+-
+ Creating a stock.partial.picking record
+-
+ !python {model: stock.picking }: |
+ import time
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])
+ if picking_id:
+ pick=self.browse(cr,uid,picking_id[0])
+ pick.force_assign(cr, uid)
+ partial_datas = {
+ 'partner_id':pick.address_id.partner_id.id,
+ 'address_id': pick.address_id.id,
+ 'delivery_date' : time.strftime('%Y-%m-%d'),
+ }
+ move = pick.move_lines[0]
+ partial_datas['move%s'%(move.id)]= {
+ 'product_id': move.product_id.id,
+ 'product_qty': move.product_qty,
+ 'product_uom': move.product_uom.id,
+ }
+ print "=====>>>>>>",partial_datas
+ self.do_partial(cr, uid, picking_id,partial_datas)
+-
+ I verify that picking order is in done state
+-
+ !python {model: stock.picking }: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])
+ if picking_id:
+ pick = self.browse(cr,uid,picking_id[0])
+ assert (pick.state) =='done', "Picking for SO is not in done state."
\ No newline at end of file
diff --git a/addons/sale/test/shipping_manual_sale_order.yml b/addons/sale/test/shipping_manual_sale_order.yml
new file mode 100644
index 00000000000..2ed3db022d3
--- /dev/null
+++ b/addons/sale/test/shipping_manual_sale_order.yml
@@ -0,0 +1,416 @@
+-
+ In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer.
+-
+ I want to sell my mobile products to the customer with name Cleartrail
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_view0}:
+ close_method: none
+ code: View
+ name: View
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_income0}:
+ close_method: unreconciled
+ code: Income
+ name: Income
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_expense0}:
+ close_method: unreconciled
+ code: Expense
+ name: Expense
+ sign: 1
+
+
+-
+ Creating an account.account.type record
+-
+ !record {model: account.account.type, id: account_account_type_cash0}:
+ close_method: balance
+ code: Cash
+ name: Cash
+ sign: 1
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_minimalchart0}:
+ code: '0'
+ company_id: base.main_company
+ currency_mode: current
+ name: Minimal Chart
+ parent_left: 1
+ parent_right: 12
+ type: view
+ user_type: account_account_type_view0
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_payable1}:
+ code: AP
+ company_id: base.main_company
+ currency_mode: current
+ name: Payable
+ parent_id: account_account_minimalchart0
+ parent_left: 2
+ parent_right: 3
+ reconcile: true
+ type: payable
+ user_type: account_account_type_expense0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_receivable0}:
+ code: AR
+ company_id: base.main_company
+ currency_mode: current
+ name: Receivable
+ parent_id: account_account_minimalchart0
+ parent_left: 4
+ parent_right: 5
+ reconcile: true
+ type: receivable
+ user_type: account_account_type_income0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_cash0}:
+ code: C
+ company_id: base.main_company
+ currency_mode: current
+ name: Cash
+ parent_id: account_account_minimalchart0
+ parent_left: 6
+ parent_right: 7
+ type: other
+ user_type: account_account_type_cash0
+
+
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_purchases0}:
+ code: P
+ company_id: base.main_company
+ currency_mode: current
+ name: Purchases
+ parent_id: account_account_minimalchart0
+ parent_left: 8
+ parent_right: 9
+ type: other
+ user_type: account_account_type_expense0
+-
+ Creating an account.account record
+-
+ !record {model: account.account, id: account_account_sales0}:
+ code: S
+ company_id: base.main_company
+ currency_mode: current
+ name: Sales
+ parent_id: account_account_minimalchart0
+ parent_left: 10
+ parent_right: 11
+ type: other
+ user_type: account_account_type_income0
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_purchasejournal0}:
+ code: PUJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_purchases0
+ default_debit_account_id: account_account_purchases0
+ name: Purchase Journal
+ sequence_id: account.sequence_purchase_journal
+ type: purchase
+ view_id: account.account_journal_view
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_salejournal0}:
+ code: SAJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_sales0
+ default_debit_account_id: account_account_sales0
+ name: Sale Journal
+ sequence_id: account.sequence_sale_journal
+ type: sale
+ view_id: account.account_journal_view
+
+
+-
+ Creating an account.journal record
+-
+ !record {model: account.journal, id: account_journal_bankjournal0}:
+ code: BNK
+ company_id: base.main_company
+ default_credit_account_id: account_account_cash0
+ default_debit_account_id: account_account_cash0
+ name: Bank Journal
+ sequence_id: account.sequence_journal
+ type: cash
+ view_id: account.account_journal_bank_view
+
+
+-
+ Creating a ir.property record
+-
+ !record {model: ir.property, id: ir_property_propertyaccountexpensecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_payable
+ name: property_account_expense_categ
+ value_reference: account.account,5
+
+
+-
+ Creating a ir.property record
+-
+ !record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_receivable
+ name: property_account_income_categ
+ value_reference: account.account,6
+-
+ Creating a res.partner.category record
+-
+ !record {model: res.partner.category, id: res_partner_category_customers0}:
+ name: Customers
+-
+ Creating an res.partner record
+-
+ !record {model: res.partner, id: res_partner_cleartrail0}:
+ category_id:
+ - res_partner_category_customers0
+ name: Cleartrail
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_1}:
+ partner_id: res_partner_cleartrail0
+ street: onam plaza, 14 B palasia A B Road
+ type: contact
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_2}:
+ partner_id: res_partner_cleartrail0
+ type: invoice
+
+
+-
+ Creating an res.partner.address record
+-
+ !record {model: res.partner.address, id: res_partner_address_3}:
+ partner_id: res_partner_cleartrail0
+ street: sangam house 15 B palasia, A B Road
+ type: delivery
+-
+ Customer Cleartrail has specific instrument requirements regarding the stockable products
+-
+ Creating an product.category record
+-
+ !record {model: product.category, id: product_category_allproductssellable0}:
+ name: Mobile Products Sellable
+
+
+-
+ Creating an product.category record
+-
+ !record {model: product.category, id: product_category_services0}:
+ name: Mobile Services
+-
+ Creating an product.template record
+-
+ !record {model: product.template, id: product_template_newchocolateslidermobile0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 200.0
+ mes_type: fixed
+ name: New Chocolate Slider Mobile
+ procure_method: make_to_order
+ standard_price: 189.0
+ supply_method: buy
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+
+-
+ Creating an product.product record
+-
+ !record {model: product.product, id: product_product_newchocolateslidermobile0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 200.0
+ mes_type: fixed
+ name: New Chocolate Slider Mobile
+ pricelist_purchase: 'Default Purchase Pricelist (0.00) : 189.00\n'
+ pricelist_sale: 'Public Pricelist (0.00) : 200.00\n'
+ procure_method: make_to_order
+ property_account_expense: sale.account_account_payable1
+ property_account_income: sale.account_account_receivable0
+ seller_delay: '1'
+ standard_price: 189.0
+ supply_method: buy
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+
+
+-
+ Creating a sale.order record
+-
+ !record {model: sale.order, id: sale_order_so0}:
+ date_order: '2010-05-12'
+ invoice_quantity: order
+ name: SO001
+ order_line:
+ - name: New Chocolate Slider Mobile
+ price_unit: 200.0
+ product_uom: product.product_uom_unit
+ product_uom_qty: 500.0
+ state: draft
+ delay: 7.0
+ product_id: sale.product_product_newchocolateslidermobile0
+ product_uos_qty: 500.0
+ type: make_to_order
+ order_policy: manual
+ partner_id: sale.res_partner_cleartrail0
+ partner_invoice_id: sale.res_partner_address_2
+ partner_order_id: sale.res_partner_address_1
+ partner_shipping_id: sale.res_partner_address_3
+ picking_policy: direct
+ pricelist_id: product.list0
+ shop_id: sale.shop
+-
+ Performing a workflow action order_confirm on module sale.order
+-
+ !workflow {model: sale.order, action: order_confirm, ref: sale_order_so0}
+-
+ I click on Create Invoice button to create the invoice.
+-
+ Performing a workflow action manual_invoice on module sale.order
+-
+ !workflow {model: sale.order, action: manual_invoice, ref: sale_order_so0}
+-
+ I verify whether the invoice has been generated for SO
+-
+ !python {model: sale.order}: |
+ so = self.browse(cr, uid, ref("sale_order_so0"))
+ assert so.invoice_ids, "Invoices has not been generated for sale_order_so0"
+-
+ Performing a workflow action invoice_open on module account.invoice
+-
+ !python {model: account.invoice}: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ import netsvc
+ wf_service = netsvc.LocalService("workflow")
+ invoice_ids = so.invoice_ids
+ for invoice in invoice_ids:
+ wf_service.trg_validate(uid, 'account.invoice',invoice.id,'invoice_open', cr)
+-
+ Creating a account.invoice.pay record
+-
+ !record {model: account.invoice.pay, id: account_invoice_pay_tst0}:
+ amount: 100000.0
+ date: '2010-05-10'
+ journal_id: sale.account_journal_bankjournal0
+ name: test
+ period_id: account.period_5
+-
+ Performing an osv_memory action wo_check on module account.invoice.pay
+-
+ !python {model: account.invoice.pay}: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ self.wo_check(cr, uid, [ref("account_invoice_pay_tst0")], {"lang": "en_US", "tz":
+ False, "active_model": 'account.invoice', "active_ids": [so.invoice_ids[0].id], "type":
+ "out_invoice", "active_id": so.invoice_ids[0].id})
+
+
+-
+ Creating a account.invoice.pay.writeoff record
+-
+ !record {model: account.invoice.pay.writeoff, id: account_invoice_pay_writeoff_0}:
+ analytic_id: account.analytic_customers
+ comment: Write-Off
+ writeoff_acc_id: account.a_sale
+ writeoff_journal_id: sale.account_journal_bankjournal0
+
+
+-
+ Performing an osv_memory action pay_and_reconcile_writeoff on module account.invoice.pay.writeoff
+-
+ !python {model: account.invoice.pay.writeoff}: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ self.pay_and_reconcile_writeoff(cr, uid, [ref("account_invoice_pay_writeoff_0")],
+ {"lang": 'en_US', "tz": False, "active_model": 'account.invoice', "active_ids":
+ [so.invoice_ids[0].id], "type": "out_invoice", "active_id": so.invoice_ids[0].id, })
+-
+ I verify the invoice are in paid state or not.
+-
+ !python {model: account.invoice}: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
+ invoice_ids = so.invoice_ids
+ for invoice in invoice_ids:
+ assert (invoice.state) =='paid', "Invoice for SO is not in done state."
+-
+ I will verify the picking associated with the sale order sale_order_so0
+-
+ !python {model: sale.order}: |
+ so = self.browse(cr, uid, ref("sale_order_so0"))
+ assert so.picking_ids,"Picking has not been generated for sale_order_so0"
+-
+ Creating a stock.partial.picking record
+-
+ !python {model: stock.picking }: |
+ import time
+ picking_id = self.search(cr, uid, [('origin','=','SO001'),('type','=','out')])
+ if picking_id:
+ pick=self.browse(cr,uid,picking_id[0])
+ pick.force_assign(cr, uid)
+ partial_datas = {
+ 'partner_id':pick.address_id.partner_id.id,
+ 'address_id': pick.address_id.id,
+ 'delivery_date' : time.strftime('%Y-%m-%d'),
+ }
+ move = pick.move_lines[0]
+ partial_datas['move%s'%(move.id)]= {
+ 'product_id': move.product_id.id,
+ 'product_qty': move.product_qty,
+ 'product_uom': move.product_uom.id,
+ }
+ self.do_partial(cr, uid, picking_id,partial_datas)
+-
+ I verify that picking order is in done state
+-
+ !python {model: stock.picking }: |
+ picking_id = self.search(cr, uid, [('origin','=','SO001'),('type','=','out')])
+ if picking_id:
+ pick = self.browse(cr,uid,picking_id[0])
+ assert (pick.state) =='done', "Picking for SO is not in done state."
\ No newline at end of file
diff --git a/addons/stock/report/report_stock_move.py b/addons/stock/report/report_stock_move.py
index b5388b336e6..11d855e63d9 100755
--- a/addons/stock/report/report_stock_move.py
+++ b/addons/stock/report/report_stock_move.py
@@ -28,15 +28,19 @@ class report_stock_move(osv.osv):
_description = "Stock Statistics"
_auto = False
_columns = {
- 'date': fields.date('Date', readonly=True),
+ 'date_planned': fields.date('Date', readonly=True),
'year': fields.char('Year', size=4, readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+ 'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
'product_id':fields.many2one('product.product', 'Product', readonly=True),
- 'location_id':fields.many2one('stock.location', 'Location', readonly=True),
+ 'location_id': fields.many2one('stock.location', 'Source Location', readonly=True, select=True, help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
+ 'location_dest_id': fields.many2one('stock.location', 'Dest. Location', readonly=True, select=True, help="Location where the system will stock the finished products."),
'product_qty':fields.integer('Qty',readonly=True),
+ 'value' : fields.float('Total Value', required=True),
+ 'product_uom': fields.many2one('product.uom', 'Product UOM', readonly=True),
'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
help='When the stock move is created it is in the \'Draft\' state.\n After that it is set to \'Confirmed\' state.\n If stock is available state is set to \'Avaiable\'.\n When the picking it done the state is \'Done\'.\
\nThe state is \'Waiting\' if the move is waiting for another one.'),
@@ -47,16 +51,24 @@ class report_stock_move(osv.osv):
tools.drop_view_if_exists(cr, 'report_stock_move')
cr.execute("""
create or replace view report_stock_move as (
- select min(m.id) as id,
- m.date as date,
- to_char(date_trunc('day',m.date), 'YYYY') as year,
- to_char(date_trunc('day',m.date), 'MM') as month,
- to_char(date_trunc('day',m.date), 'YYYY-MM-DD') as day,
- m.location_id as location_id,
- m.product_id as product_id,
- m.state as state,
- sum(m.product_qty) as product_qty
- from stock_move as m group by m.product_id, m.location_id, m.id, m.date, m.state
- )
+ select min(m.id) as id,
+ m.date_planned as date_planned,
+ to_char(date_trunc('day',m.date_planned), 'YYYY') as year,
+ to_char(date_trunc('day',m.date_planned), 'MM') as month,
+ to_char(date_trunc('day',m.date_planned), 'YYYY-MM-DD') as day,
+ m.address_id as partner_id,
+ m.location_id as location_id,
+ m.location_dest_id as location_dest_id,
+ m.product_id as product_id,
+ m.state as state,
+ m.product_uom as product_uom,
+ sum(m.product_qty) as product_qty,
+ pt.standard_price * sum(m.product_qty) as value
+ from stock_move m ,product_product pp,product_template pt
+ where
+ m.product_id=pp.id and pp.product_tmpl_id=pt.id
+ group by
+ m.id, m.product_id,m.address_id, m.location_id, m.location_dest_id,
+ m.date_planned, m.state, m.product_uom,pt.standard_price )
""")
report_stock_move()
diff --git a/addons/stock/report/report_stock_move_view.xml b/addons/stock/report/report_stock_move_view.xml
index 69988444909..8a72f5182d8 100755
--- a/addons/stock/report/report_stock_move_view.xml
+++ b/addons/stock/report/report_stock_move_view.xml
@@ -7,14 +7,19 @@
tree
-
+
+
+
+
-
+
+
+
@@ -43,13 +48,14 @@
domain="[('year','=',time.strftime('%%Y'))]"
help="Stock Moves of the year"/>
@@ -64,22 +70,35 @@
help = "Available Stock-Moves"/>
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
+
+
+
+
+
-
+
@@ -92,7 +111,7 @@
form
tree,graph
-
+ {'search_default_product':1, 'search_default_src_location':1,'search_default_done':1,'group_by':[]}