From 34e035b083179a6ba7f086e06fdd7ec96d7364d8 Mon Sep 17 00:00:00 2001 From: mtr Date: Fri, 16 Jul 2010 10:28:08 +0530 Subject: [PATCH 1/7] [IMP] sale:-added and modified the yaml files bzr revid: mtr@mtr-20100716045808-ytnu14gcf6ix1avn --- addons/sale/__openerp__.py | 2 + addons/sale/test/invoice_from_picking.yml | 508 +++++++++++++++++ addons/sale/test/postpaid_sale_order.yml | 509 ++++++++++++++++++ addons/sale/test/prepaid_sale_order.yml | 124 ++++- .../sale/test/shipping_manual_sale_order.yml | 133 ++++- 5 files changed, 1258 insertions(+), 18 deletions(-) create mode 100644 addons/sale/test/invoice_from_picking.yml create mode 100644 addons/sale/test/postpaid_sale_order.yml diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index d60b132a827..7c125a806a3 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -70,7 +70,9 @@ 'demo_xml': ['sale_demo.xml','board_sale_demo.xml'], 'test': [ 'test/shipping_manual_sale_order.yml', + 'test/postpaid_sale_order.yml', 'test/prepaid_sale_order.yml', + 'test/invoice_from_picking.yml', 'test/advance_invoice.yml', 'test/so_make_line_invoice.yml', 'test/so_make_invoice.yml', diff --git a/addons/sale/test/invoice_from_picking.yml b/addons/sale/test/invoice_from_picking.yml new file mode 100644 index 00000000000..c5ba349b69a --- /dev/null +++ b/addons/sale/test/invoice_from_picking.yml @@ -0,0 +1,508 @@ +- + In order to test the sale module, I need to configure details regarding product & customer. +- + I am going to sell my Mobile products to the customer with name Cleartrail +- + I create View Account Type. +- + !record {model: account.account.type, id: account_account_type_view0}: + close_method: none + code: View + name: View + sign: 1 +- + I create Income Account Type. +- + !record {model: account.account.type, id: account_account_type_income0}: + close_method: unreconciled + code: Income + name: Income + sign: 1 +- + I create Expense Account Type. +- + !record {model: account.account.type, id: account_account_type_expense0}: + close_method: unreconciled + code: Expense + name: Expense + sign: 1 +- + I create Cash Account Type. +- + !record {model: account.account.type, id: account_account_type_cash0}: + close_method: balance + code: Cash + name: Cash + sign: 1 +- + I create Minimal Chart Account. +- + !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 +- + I create Payable Account. +- + !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 +- + I create Receivable Account. +- + !record {model: account.account, id: account_account_receivable1}: + code: AR1 + 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 +- + I create Cash Account. +- + !record {model: account.account, id: account_account_cash2}: + code: C2 + 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 +- + I create Purchases Account. +- + !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 +- + I create Sales Account. +- + !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 +- + I create Purchase Journal. +- + !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 +- + I create Sale Journal. +- + !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 +- + I create Bank Journal. +- + !record {model: account.journal, id: account_journal_bankjournal2}: + code: BNK + company_id: base.main_company + default_credit_account_id: account_account_cash2 + default_debit_account_id: account_account_cash2 + name: Bank Journal + sequence_id: account.sequence_journal + type: cash + view_id: account.account_journal_bank_view +- + I create ir.property for account payable. +- + !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 +- + I create ir.property for account receivable. +- + !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 +- + I create Partner category Customers. +- + !record {model: res.partner.category, id: res_partner_category_customers0}: + name: Customers +- + I create Cleartrail Customer. +- + !record {model: res.partner, id: res_partner_cleartrail0}: + category_id: + - res_partner_category_customers0 + name: Cleartrail +- + I create contact address for Cleartrail. +- + !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 +- + I create invoice address for Cleartrail. +- + !record {model: res.partner.address, id: res_partner_address_2}: + partner_id: res_partner_cleartrail0 + street: sarda house 24 B palasia, A B Road + type: invoice +- + I create delivery address for Cleartrail. +- + !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 requirement regarding the stockable products. +- + I define product category Mobile Products Sellable. +- + !record {model: product.category, id: product_category_allproductssellable0}: + name: Mobile Products Sellable +- + I define product category Mobile Services. +- + !record {model: product.category, id: product_category_services0}: + name: Mobile Services +- + I define Slider Mobile template. +- + !record {model: product.template, id: product_template_slidermobile0}: + categ_id: product_category_allproductssellable0 + cost_method: standard + list_price: 510.0 + mes_type: fixed + name: Slider Mobile + procure_method: make_to_order + standard_price: 500.0 + supply_method: buy + type: product + uom_id: product.product_uom_unit + uom_po_id: product.product_uom_unit +- + I define Slider Mobile. +- + !record {model: product.product, id: product_product_slidermobile0}: + categ_id: product_category_allproductssellable0 + cost_method: standard + list_price: 510.0 + mes_type: fixed + name: Slider Mobile + pricelist_purchase: 'Default Purchase Pricelist (0.00) : 500.0.00\n' + pricelist_sale: 'Public Pricelist (0.00) : 510.00\n' + procure_method: make_to_order + property_account_expense: sale.account_account_payable1 + property_account_income: sale.account_account_receivable1 + seller_delay: '1' + seller_ids: + - delay: 1 + name: base.res_partner_agrolait + qty: 5.0 + standard_price: 500.0 + supply_method: buy + type: product + uom_id: product.product_uom_unit + uom_po_id: product.product_uom_unit +- + I create a Sale Order for Slider Mobile for qty 500 having Shipping Policy is 'Invoice from Picking' +- + !record {model: sale.order, id: sale_order_so7}: + date_order: '2010-07-15' + invoice_quantity: order + name: Test_SO007 + order_line: + - name: Slider Mobile + price_unit: 510.0 + product_uom: product.product_uom_unit + product_uom_qty: 500.0 + state: draft + delay: 7.0 + product_id: sale.product_product_slidermobile0 + product_uos_qty: 500.0 + th_weight: 0.0 + type: make_to_order + order_policy: picking + 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 +- + I confirm the sale order. +- + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so7} +- + I verify that picking has been generated for the sale order. +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so7")) + assert so.picking_ids,"Picking has not been generated for sale_order_so0" +- + Then I done the picking +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + 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, + } + self.do_partial(cr, uid, [pick.id],partial_datas) +- + Then I create invoice from picking +- + !record {model: stock.invoice.onshipping, id: stock_invoice_onshipping_0}: + invoice_date: '2010-07-15' + journal_id: account.sales_journal + type: out_invoice +- + Then I click on 'Create Invoices' button +- + !python {model: stock.invoice.onshipping}: | + sale_obj=self.pool.get('sale.order') + sale_id=sale_obj.browse(cr, uid, ref("sale_order_so7")) + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('origin', '=', sale_id.name)]) + self.create_invoice(cr, uid, [ref("stock_invoice_onshipping_0")], {"lang": "en_US", + "search_default_available": 1, "tz": False, "active_model": "stock.picking", + "contact_display": "partner", "active_ids": ids, "active_id": ids[0]}) +- + I check that an invoice has been created. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so7")) + assert(sale_id.invoice_ids), "Invoice has not been created" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + 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 entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: + amount: 255000.0 + date: '2010-07-15' + journal_id: sale.account_journal_bankjournal2 + name: tst + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"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 an account invoice pay writeoff entry. +- + !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_bankjournal2 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + 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_so7")) + invoice_ids = so.invoice_ids + for invoice in invoice_ids: + assert (invoice.state) =='paid', "Invoice for SO is not in done state." +- + I check that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so7")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I verify that a procurement has been generated for so +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('No Procurements!') +- + Then I click on the "Run Procurement" button +- + !python {model: procurement.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + import netsvc + wf_service = netsvc.LocalService("workflow") + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + for proc in proc_ids: + wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) +- + I verify that a procurement state is "running" +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) + assert proc_ids, _('Procurement is not in the running state!') +- + I verify that a purchase order has been generated +- + !python {model: purchase.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('Purchase order has not been generated') +- + I click on the "Confirm" button to confirm the purchase order +- + !python {model: purchase.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) +- + I click on the "Approved by supplier" button to approve the purchase order +- + !python {model: purchase.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) +- + I verify that a picking related to purchase order has been generated. +- + !python {model: purchase.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + ids = self.search(cr, uid, [('origin','=',so.name)]) + po = self.browse(cr, uid, ids)[0] + assert(po.picking_ids) +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-15 17:52:09' +- + I click on the "Validate" button +- + !python {model: stock.picking}: | + sale_order_obj = self.pool.get('sale.order') + pur_obj = self.pool.get('purchase.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) + import netsvc + wf_service = netsvc.LocalService("workflow") + for pick in pick_ser_id: + wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) +- + I verify that picking state is done +- + !python {model: purchase.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + pur_id = self.search(cr, uid, [('origin','=',so.name)]) + po = self.browse(cr, uid, pur_id)[0] + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) + assert ids, _('Picking is not in the done state!') +- + I verify that a "Picked" has been set to true +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so7")) + assert (so.shipped == True), "Picking is not done." +- + I verify that a sale order is in done state +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so7")) + assert (so.state == 'done'), "Sale order is not in the done state." + diff --git a/addons/sale/test/postpaid_sale_order.yml b/addons/sale/test/postpaid_sale_order.yml new file mode 100644 index 00000000000..9e35a7a3730 --- /dev/null +++ b/addons/sale/test/postpaid_sale_order.yml @@ -0,0 +1,509 @@ +- + In order to test the sale module, I need to configure details regarding product & customer. +- + I am going to sell my Mobile products to the customer with name Cleartrail +- + I create View Account Type. +- + !record {model: account.account.type, id: account_account_type_view0}: + close_method: none + code: View + name: View + sign: 1 +- + I create Income Account Type. +- + !record {model: account.account.type, id: account_account_type_income0}: + close_method: unreconciled + code: Income + name: Income + sign: 1 +- + I create Expense Account Type. +- + !record {model: account.account.type, id: account_account_type_expense0}: + close_method: unreconciled + code: Expense + name: Expense + sign: 1 +- + I create Cash Account Type. +- + !record {model: account.account.type, id: account_account_type_cash0}: + close_method: balance + code: Cash + name: Cash + sign: 1 +- + I create Minimal Chart Account. +- + !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 +- + I create Payable Account. +- + !record {model: account.account, id: account_account_payable2}: + code: AP2 + 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 +- + I create Receivable Account. +- + !record {model: account.account, id: account_account_receivable2}: + code: AR2 + 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 +- + I create Cash Account. +- + !record {model: account.account, id: account_account_cash1}: + code: CASH + 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 +- + I create Purchases Account. +- + !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 +- + I create Sales Account. +- + !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 +- + I create Purchase Journal. +- + !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 +- + I create Sale Journal. +- + !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 +- + I create Bank Journal. +- + !record {model: account.journal, id: account_journal_bankjournal1}: + code: BNK + company_id: base.main_company + default_credit_account_id: account_account_cash1 + default_debit_account_id: account_account_cash1 + name: Bank Journal + sequence_id: account.sequence_journal + type: cash + view_id: account.account_journal_bank_view +- + I create ir.property for account payable. +- + !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 +- + I create ir.property for account receivable. +- + !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 +- + I create Partner category Customers. +- + !record {model: res.partner.category, id: res_partner_category_customers0}: + name: Customers +- + I create Cleartrail Customer. +- + !record {model: res.partner, id: res_partner_cleartrail0}: + category_id: + - res_partner_category_customers0 + name: Cleartrail +- + I create contact address for Cleartrail. +- + !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 +- + I create invoice address for Cleartrail. +- + !record {model: res.partner.address, id: res_partner_address_2}: + partner_id: res_partner_cleartrail0 + street: sarda house 24 B palasia, A B Road + type: invoice +- + I create delivery address for Cleartrail. +- + !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 requirement regarding the stockable products. +- + I define product category Mobile Products Sellable. +- + !record {model: product.category, id: product_category_allproductssellable0}: + name: Mobile Products Sellable +- + I define product category Mobile Services. +- + !record {model: product.category, id: product_category_services0}: + name: Mobile Services +- + I define New Slider Mobile template. +- + !record {model: product.template, id: product_template_newslidermobile0}: + categ_id: product_category_allproductssellable0 + cost_method: standard + list_price: 200.0 + mes_type: fixed + name: New 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 +- + I define New Slider Mobile. +- + !record {model: product.product, id: product_product_newslidermobile0}: + categ_id: product_category_allproductssellable0 + cost_method: standard + list_price: 200.0 + mes_type: fixed + name: New 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_payable2 + property_account_income: sale.account_account_receivable2 + seller_delay: '1' + seller_ids: + - delay: 1 + name: base.res_partner_agrolait + qty: 5.0 + standard_price: 189.0 + supply_method: buy + type: product + uom_id: product.product_uom_unit + uom_po_id: product.product_uom_unit +- + I create a Sale Order for New Slider Mobile for qty 500 having Shipping Policy is 'Invoice on order after Delivery' +- + !record {model: sale.order, id: sale_order_so8}: + date_order: '2010-07-15' + invoice_quantity: order + name: Test_SO008 + order_line: + - name: New 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_newslidermobile0 + product_uos_qty: 500.0 + type: make_to_order + order_policy: postpaid + 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 +- + I confirm the Sale Order. +- + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so8} +- + I verify that the picking has been generated for the sale order +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert so.picking_ids,"Picking has not been generated for sale_order_so8" +- + Products are delivered to the Cleartrail Customer. +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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, + } + self.do_partial(cr, uid, [pick.id],partial_datas) +- + I click on the "Validate" button +- + !python {model: stock.picking}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + import netsvc + wf_service = netsvc.LocalService("workflow") + picking_id = self.search(cr, uid, [('origin','=',so.name)]) + for pick in picking_id: + wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) +- + 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_so8")) + 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." +- + I verify that a procurement has been generated for so +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('No Procurements!') +- + Then I click on the "Run Procurement" button +- + !python {model: procurement.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + import netsvc + wf_service = netsvc.LocalService("workflow") + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + for proc in proc_ids: + wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) +- + I verify that a procurement state is "running" +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) + assert proc_ids, _('Procurement is not in the running state!') +- + I verify that a purchase order has been generated +- + !python {model: purchase.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('Purchase order has not been generated') +- + I click on the "Confirm" button to confirm the purchase order +- + !python {model: purchase.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) +- + I click on the "Approved by supplier" button to approve the purchase order +- + !python {model: purchase.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) +- + I verify that a picking related to purchase order has been generated. +- + !python {model: purchase.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + ids = self.search(cr, uid, [('origin','=',so.name)]) + po = self.browse(cr, uid, ids)[0] + assert(po.picking_ids) +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-15 17:52:09' +- + I click on the "Validate" button +- + !python {model: stock.picking}: | + sale_order_obj = self.pool.get('sale.order') + pur_obj = self.pool.get('purchase.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) + import netsvc + wf_service = netsvc.LocalService("workflow") + for pick in pick_ser_id: + wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) +- + I verify that picking state is done +- + !python {model: purchase.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + pur_id = self.search(cr, uid, [('origin','=',so.name)]) + po = self.browse(cr, uid, pur_id)[0] + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) + assert ids, _('Picking is not in the done state!') +- + I verify that a "Picked" has been set to true +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert (so.shipped == True), "Picking is not done." +- + I verify that an invoice has been generated for SO +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert so.invoice_ids, "Invoices has not been generated for sale_order_so8" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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 entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst0}: + amount: 100000.0 + date: '2010-07-15' + journal_id: sale.account_journal_bankjournal1 + name: test + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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 an account invoice pay writeoff entry. +- + !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_bankjournal1 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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_so8")) + invoice_ids = so.invoice_ids + for invoice in invoice_ids: + assert (invoice.state) =='paid', "Invoice for SO is not in done state." +- + I verify that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so8")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I verify that sale order is in done state +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert (so.state == 'done'), "Sale order is not in the done state." \ No newline at end of file diff --git a/addons/sale/test/prepaid_sale_order.yml b/addons/sale/test/prepaid_sale_order.yml index ce344bb23ae..e1595aa6142 100644 --- a/addons/sale/test/prepaid_sale_order.yml +++ b/addons/sale/test/prepaid_sale_order.yml @@ -239,13 +239,30 @@ property_account_expense: sale.account_account_payable1 property_account_income: sale.account_account_receivable0 seller_delay: '1' + seller_ids: + - delay: 1 + name: base.res_partner_agrolait + qty: 5.0 standard_price: 160.0 supply_method: produce type: product uom_id: product.product_uom_unit uom_po_id: product.product_uom_unit - - I create a Sale Order for LG Viewty Smart for qty 500 having order_policy prepaid. + I create a Bill of Material record for LG Viewty Smart +- + !record {model: mrp.bom, id: mrp_bom_lgviewtysmart0}: + company_id: base.main_company + name: LG Viewty Smart + product_efficiency: 1.0 + product_id: sale.product_product_lgviewtysmart0 + product_qty: 1.0 + product_uom: product.product_uom_unit + product_uos_qty: 0.0 + sequence: 0.0 + type: normal +- + I create a Sale Order for LG Viewty Smart for qty 500 having Shipping Policy is 'Payment Before Delivery' - !record {model: sale.order, id: sale_order_so1}: date_order: '2010-05-03' @@ -270,14 +287,12 @@ picking_policy: direct pricelist_id: product.list0 shop_id: sale.shop - - - I confirm the sale order. - !workflow {model: sale.order, action: order_confirm, ref: sale_order_so1} - - I will verify whether the invoice has been generated for SO since Shipping policy is 'Payment Before Delivery' + I 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_so1")) @@ -311,8 +326,6 @@ self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"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 an account invoice pay writeoff entry. - @@ -321,8 +334,6 @@ comment: Write-Off writeoff_acc_id: account.a_sale writeoff_journal_id: sale.account_journal_bankjournal0 - - - Pay and Reconcile the Invoice. - @@ -332,10 +343,14 @@ 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_so1 + I check that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so1")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I verify the picking associated with the sale order sale_order_so1 - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_so1")) @@ -374,3 +389,90 @@ if picking_id: pick = self.browse(cr,uid,picking_id[0]) assert (pick.state) =='done', "Picking for SO is not in done state." +- + I verify that a procurement has been generated for so +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('No Procurements!') +- + Then I click on the "Run Procurement" button +- + !python {model: procurement.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + import netsvc + wf_service = netsvc.LocalService("workflow") + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + for proc in proc_ids: + wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) +- + I verify that a procurement state is "running" +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) + assert proc_ids, _('Procurement is not in the running state!') +- + I verify that a manufacturing order has been generated +- + !python {model: mrp.production}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + mnf_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert mnf_ids, _('Manufacturing order has not been generated') +- + Manufacturing order has been generated +- + !python {model: mrp.production}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + import netsvc + wf_service = netsvc.LocalService("workflow") + mnf_ids = self.search(cr, uid, [('origin','=',so.name)]) + for mnf in mnf_ids: + wf_service.trg_validate(uid, 'mrp.production',mnf,'button_produce', cr) +- + Creating a mrp.product.produce record +- + !record {model: mrp.product.produce, id: mrp_product_produce_0}: + mode: consume_produce + product_qty: 500.0 +- + Then I click on the "Confirm" button +- + !python {model: mrp.production}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + import netsvc + wf_service = netsvc.LocalService("workflow") + mnf_ids = self.search(cr, uid, [('origin','=',so.name)]) + for mnf in mnf_ids: + wf_service.trg_validate(uid, 'mrp.production',mnf,'button_produce_done', cr) +- + I verify that the manufacturing state is "done". +- + !python {model: mrp.production}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + mnf_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','done')]) + assert mnf_ids, _('manufacturing is not done!') +- + I verify that a "Picked" has been set to true +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so1")) + assert (so.shipped == True), "Picking is not done." +- + I verify that a sale order is in done state +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so1")) + assert (so.state == 'done'), "Sale order is not in the done state." diff --git a/addons/sale/test/shipping_manual_sale_order.yml b/addons/sale/test/shipping_manual_sale_order.yml index 1f5bc5fe10a..7389b2d891e 100644 --- a/addons/sale/test/shipping_manual_sale_order.yml +++ b/addons/sale/test/shipping_manual_sale_order.yml @@ -240,13 +240,17 @@ property_account_expense: sale.account_account_payable1 property_account_income: sale.account_account_receivable0 seller_delay: '1' + seller_ids: + - delay: 1 + name: base.res_partner_agrolait + qty: 5.0 standard_price: 189.0 supply_method: buy type: product uom_id: product.product_uom_unit uom_po_id: product.product_uom_unit - - I create a Sale Order for LG Viewty Smart for qty 500 having order_policy manual. + I create a Sale Order for New Chocolate Slider Mobile for qty 500 having Shipping Policy is 'Shipping & Manual Invoice' - !record {model: sale.order, id: sale_order_so0}: date_order: '2010-05-12' @@ -313,8 +317,6 @@ 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 an account invoice pay writeoff entry. - @@ -323,8 +325,6 @@ comment: Write-Off writeoff_acc_id: account.a_sale writeoff_journal_id: sale.account_journal_bankjournal0 - - - Pay and Reconcile the Invoice. - @@ -343,8 +343,14 @@ invoice_ids = so.invoice_ids for invoice in invoice_ids: assert (invoice.state) =='paid', "Invoice for SO is not in done state." -- - I verify the picking associated with the sale order sale_order_so0. +- + I verify that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so0")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I verify that the picking has been generated for the sale order - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_so0")) @@ -382,3 +388,116 @@ if picking_id: pick = self.browse(cr,uid,picking_id[0]) assert (pick.state) =='done', "Picking for SO is not in done state." +- + I verify that a procurement has been generated for so +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('No Procurements!') +- + Then I click on the "Run Procurement" button +- + !python {model: procurement.order}: | + 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") + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + for proc in proc_ids: + wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) +- + I verify that a procurement state is "running" +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) + assert proc_ids, _('Procurement is not in the running state!') +- + I verify that a purchase order has been generated +- + !python {model: purchase.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('Purchase order has not been generated') +- + I click on the "Confirm" button to confirm the purchase order +- + !python {model: purchase.order}: | + 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") + pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) +- + I click on the "Approved by supplier" button to approve the purchase order +- + !python {model: purchase.order}: | + 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") + pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) +- + I verify that a picking related to purchase order has been generated. +- + !python {model: purchase.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + ids = self.search(cr, uid, [('origin','=',so.name)]) + po = self.browse(cr, uid, ids)[0] + assert(po.picking_ids) +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-13 17:52:09' +- + I click on the "Validate" button +- + !python {model: stock.picking}: | + sale_order_obj = self.pool.get('sale.order') + pur_obj = self.pool.get('purchase.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) + import netsvc + wf_service = netsvc.LocalService("workflow") + for pick in pick_ser_id: + wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) +- + I verify that picking state is done +- + !python {model: purchase.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + pur_id = self.search(cr, uid, [('origin','=',so.name)]) + po = self.browse(cr, uid, pur_id)[0] + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) + assert ids, _('Picking is not in the done state!') +- + I verify that a "Picked" has been set to true +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so0")) + assert (so.shipped == True), "Picking is not done." +- + I verify that a sale order is in done state +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so0")) + assert (so.state == 'done'), "Sale order is not in the done state." + From 2dab730c619e996e7d53214e87b01dcc727ff70e Mon Sep 17 00:00:00 2001 From: mtr Date: Fri, 16 Jul 2010 19:05:35 +0530 Subject: [PATCH 2/7] [IMP] sale:-improved the yaml files-postpaid,shipping-manual,invoice from picking bzr revid: mtr@mtr-20100716133535-ny9yr8txsi86f5e7 --- addons/sale/test/invoice_from_picking.yml | 125 +++++++++--- addons/sale/test/postpaid_sale_order.yml | 149 ++++++++++---- .../sale/test/shipping_manual_sale_order.yml | 182 ++++++++++++------ 3 files changed, 334 insertions(+), 122 deletions(-) diff --git a/addons/sale/test/invoice_from_picking.yml b/addons/sale/test/invoice_from_picking.yml index c5ba349b69a..a13120dc5a7 100644 --- a/addons/sale/test/invoice_from_picking.yml +++ b/addons/sale/test/invoice_from_picking.yml @@ -362,7 +362,7 @@ False, "active_model": 'account.invoice', "active_ids": [so.invoice_ids[0].id], "type": "out_invoice", "active_id": so.invoice_ids[0].id, }) - - Creating an account invoice pay writeoff entry. + Creating an account invoice pay writeoff entry. - !record {model: account.invoice.pay.writeoff, id: account_invoice_pay_writeoff_0}: analytic_id: account.analytic_customers @@ -418,6 +418,10 @@ - !python {model: procurement.order}: | from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) @@ -425,43 +429,61 @@ - I verify that a purchase order has been generated - - !python {model: purchase.order}: | + !python {model: sale.order}: | from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - assert proc_ids, _('Purchase order has not been generated') + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase order has not been generated" + so = self.browse(cr, uid, ref("sale_order_so7")) + pur_obj=self.pool.get('purchase.order') + pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) + assert pur_id, _('Purchase order has not been generated') - I click on the "Confirm" button to confirm the purchase order - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase order has not been generated" + pur_obj=self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so7")) import netsvc wf_service = netsvc.LocalService("workflow") - pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) for pur in pur_ids: wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) - I click on the "Approved by supplier" button to approve the purchase order - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase order has not been generated" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so7")) import netsvc wf_service = netsvc.LocalService("workflow") - pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) for pur in pur_ids: wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) - I verify that a picking related to purchase order has been generated. - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - ids = self.search(cr, uid, [('origin','=',so.name)]) - po = self.browse(cr, uid, ids)[0] - assert(po.picking_ids) + !python {model: sale.order}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase order has not been generated" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so7")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + assert(po.picking_ids),"Picking for purchase order has not been generated" - Then I click on the "Products Received" button of Incoming Shipments - @@ -471,6 +493,10 @@ I click on the "Validate" button - !python {model: stock.picking}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase order has not been generated" sale_order_obj = self.pool.get('sale.order') pur_obj = self.pool.get('purchase.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) @@ -482,23 +508,68 @@ for pick in pick_ser_id: wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) - - I verify that picking state is done + I verify that picking for purchase order has been done. - - !python {model: purchase.order}: | + !python {model: sale.order}: | from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - pur_id = self.search(cr, uid, [('origin','=',so.name)]) - po = self.browse(cr, uid, pur_id)[0] + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase order has not been generated" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so7")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] picking_obj = self.pool.get('stock.picking') ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) assert ids, _('Picking is not in the done state!') +- + I verify that delivery order has been generated for sale order +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + assert (picking_id),"Delivery order has not been generated" +- + I verify that delivery has been done +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + 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, [pick.id],partial_datas) +- + I verify that delivery state is done +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + if picking_id: + pick = self.browse(cr,uid,picking_id[0]) + assert (pick.state) =='done', "Picking for SO is not in done state." - I verify that a "Picked" has been set to true - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_so7")) - assert (so.shipped == True), "Picking is not done." + assert (so.shipped == True), "Picked has not been set to True" - I verify that a sale order is in done state - diff --git a/addons/sale/test/postpaid_sale_order.yml b/addons/sale/test/postpaid_sale_order.yml index 9e35a7a3730..c16a2a3895f 100644 --- a/addons/sale/test/postpaid_sale_order.yml +++ b/addons/sale/test/postpaid_sale_order.yml @@ -285,7 +285,7 @@ so = self.browse(cr, uid, ref("sale_order_so8")) assert so.picking_ids,"Picking has not been generated for sale_order_so8" - - Products are delivered to the Cleartrail Customer. + Then I done the picking - !python {model: stock.picking }: | import time @@ -307,17 +307,6 @@ 'product_uom': move.product_uom.id, } self.do_partial(cr, uid, [pick.id],partial_datas) -- - I click on the "Validate" button -- - !python {model: stock.picking}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - import netsvc - wf_service = netsvc.LocalService("workflow") - picking_id = self.search(cr, uid, [('origin','=',so.name)]) - for pick in picking_id: - wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) - I verify that picking order is in done state. - @@ -328,6 +317,47 @@ if picking_id: pick = self.browse(cr,uid,picking_id[0]) assert (pick.state == 'done'), "Picking for SO is not in done state." +- + I verify that delivery order has been generated for sale order +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + assert (picking_id),"Delivery order has not been generated" +- + I click on the Products Sent button and then on the Validate button +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + 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, [pick.id],partial_datas) +- + I verify that delivery state is done +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + if picking_id: + pick = self.browse(cr,uid,picking_id[0]) + assert (pick.state) =='done', "Picking for SO is not in done state." - I verify that a procurement has been generated for so - @@ -353,50 +383,71 @@ - !python {model: procurement.order}: | from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) - assert proc_ids, _('Procurement is not in the running state!') - I verify that a purchase order has been generated - - !python {model: purchase.order}: | + !python {model: sale.order}: | from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - assert proc_ids, _('Purchase order has not been generated') + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + so = self.browse(cr, uid, ref("sale_order_so8")) + pur_obj=self.pool.get('purchase.order') + pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) + assert pur_id, _('Purchase order has not been generated') - I click on the "Confirm" button to confirm the purchase order - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + pur_obj=self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so8")) import netsvc wf_service = netsvc.LocalService("workflow") - pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) for pur in pur_ids: wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) - I click on the "Approved by supplier" button to approve the purchase order - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so8")) import netsvc wf_service = netsvc.LocalService("workflow") - pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) for pur in pur_ids: wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) - I verify that a picking related to purchase order has been generated. - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - ids = self.search(cr, uid, [('origin','=',so.name)]) - po = self.browse(cr, uid, ids)[0] - assert(po.picking_ids) + !python {model: sale.order}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so8")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + assert(po.picking_ids),"Picking for purchase order has not been generated" - Then I click on the "Products Received" button of Incoming Shipments - @@ -406,6 +457,10 @@ I click on the "Validate" button - !python {model: stock.picking}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" sale_order_obj = self.pool.get('sale.order') pur_obj = self.pool.get('purchase.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) @@ -417,14 +472,18 @@ for pick in pick_ser_id: wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) - - I verify that picking state is done + I verify that picking for purchase order has been done. - - !python {model: purchase.order}: | + !python {model: sale.order}: | from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - pur_id = self.search(cr, uid, [('origin','=',so.name)]) - po = self.browse(cr, uid, pur_id)[0] + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so8")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] picking_obj = self.pool.get('stock.picking') ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) assert ids, _('Picking is not in the done state!') @@ -439,7 +498,7 @@ - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_so8")) - assert so.invoice_ids, "Invoices has not been generated for sale_order_so8" + assert so.invoice_ids, "Invoice has not been generated" - I open the Invoice for the SO. - @@ -464,6 +523,10 @@ I pay the invoice. - !python {model: account.invoice.pay}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Invoice has not been generated" sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) self.wo_check(cr, uid, [ref("account_invoice_pay_tst0")], {"lang": "en_US", "tz": @@ -481,6 +544,10 @@ Pay and Reconcile the Invoice. - !python {model: account.invoice.pay.writeoff}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Invoice has not been generated" sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) self.pay_and_reconcile_writeoff(cr, uid, [ref("account_invoice_pay_writeoff_0")], @@ -490,6 +557,10 @@ I verify the invoice are in paid state or not. - !python {model: account.invoice}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Invoice has not been generated" sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) invoice_ids = so.invoice_ids diff --git a/addons/sale/test/shipping_manual_sale_order.yml b/addons/sale/test/shipping_manual_sale_order.yml index 7389b2d891e..045483cd0b6 100644 --- a/addons/sale/test/shipping_manual_sale_order.yml +++ b/addons/sale/test/shipping_manual_sale_order.yml @@ -356,38 +356,13 @@ so = self.browse(cr, uid, ref("sale_order_so0")) assert so.picking_ids,"Picking has not been generated for sale_order_so0" - - Products are delivered to the Cleartrail Customer. -- - !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, - } - self.do_partial(cr, uid, [pick.id],partial_datas) -- - I verify that picking order is in done state. + I verify that delivery order has been generated for sale order - !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." + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + assert (picking_id),"Delivery order has not been generated" - I verify that a procurement has been generated for so - @@ -413,6 +388,10 @@ - !python {model: procurement.order}: | from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) @@ -420,43 +399,61 @@ - I verify that a purchase order has been generated - - !python {model: purchase.order}: | + !python {model: sale.order}: | from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - assert proc_ids, _('Purchase order has not been generated') + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + so = self.browse(cr, uid, ref("sale_order_so0")) + pur_obj=self.pool.get('purchase.order') + pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) + assert pur_id, _('Purchase order has not been generated') - I click on the "Confirm" button to confirm the purchase order - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + pur_obj=self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so0")) import netsvc wf_service = netsvc.LocalService("workflow") - pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) for pur in pur_ids: wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) - I click on the "Approved by supplier" button to approve the purchase order - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so0")) import netsvc wf_service = netsvc.LocalService("workflow") - pur_ids = self.search(cr, uid, [('origin','=',so.name)]) + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) for pur in pur_ids: wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) - I verify that a picking related to purchase order has been generated. - - !python {model: purchase.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) - ids = self.search(cr, uid, [('origin','=',so.name)]) - po = self.browse(cr, uid, ids)[0] - assert(po.picking_ids) + !python {model: sale.order}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so0")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + assert(po.picking_ids),"Picking for purchase order has not been generated" - Then I click on the "Products Received" button of Incoming Shipments - @@ -466,6 +463,10 @@ I click on the "Validate" button - !python {model: stock.picking}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" sale_order_obj = self.pool.get('sale.order') pur_obj = self.pool.get('purchase.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) @@ -477,27 +478,96 @@ for pick in pick_ser_id: wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) - - I verify that picking state is done + I verify that picking for purchase order has been done. - - !python {model: purchase.order}: | + !python {model: sale.order}: | from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) - pur_id = self.search(cr, uid, [('origin','=',so.name)]) - po = self.browse(cr, uid, pur_id)[0] + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + assert (mod_brw.state == 'installed'),"Purchase module is not installed" + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so0")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] picking_obj = self.pool.get('stock.picking') ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) assert ids, _('Picking is not in the done state!') +- + Then I done the picking +- + !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, + } + self.do_partial(cr, uid, [pick.id],partial_datas) +- + I verify that picking for sale 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." +- + Then I done the delivery order +- + !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','=','delivery')]) + 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, [pick.id],partial_datas) +- + I verify that delivery state is done +- + !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','=','delivery')]) + if picking_id: + pick = self.browse(cr,uid,picking_id[0]) + assert (pick.state) =='done', "Picking for SO is not in done state." - I verify that a "Picked" has been set to true - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_so0")) - assert (so.shipped == True), "Picking is not done." -- + assert (so.shipped == True), "Picked has not been set to True" +- I verify that a sale order is in done state - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_so0")) assert (so.state == 'done'), "Sale order is not in the done state." - From d8b5bcbfa2bb4bb28afb1b8e2f6ac191b36a15e8 Mon Sep 17 00:00:00 2001 From: mtr Date: Mon, 19 Jul 2010 14:40:27 +0530 Subject: [PATCH 3/7] [IMP] sale:-improved the yaml file prepaid(with procurement) bzr revid: mtr@mtr-20100719091027-2jjqcc3jhkfdz0ni --- addons/sale/test/prepaid_sale_order.yml | 76 +++++++++++++------------ 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/addons/sale/test/prepaid_sale_order.yml b/addons/sale/test/prepaid_sale_order.yml index e1595aa6142..18b090e823a 100644 --- a/addons/sale/test/prepaid_sale_order.yml +++ b/addons/sale/test/prepaid_sale_order.yml @@ -248,20 +248,8 @@ type: product uom_id: product.product_uom_unit uom_po_id: product.product_uom_unit -- - I create a Bill of Material record for LG Viewty Smart -- - !record {model: mrp.bom, id: mrp_bom_lgviewtysmart0}: - company_id: base.main_company - name: LG Viewty Smart - product_efficiency: 1.0 - product_id: sale.product_product_lgviewtysmart0 - product_qty: 1.0 - product_uom: product.product_uom_unit - product_uos_qty: 0.0 - sequence: 0.0 - type: normal -- + +- I create a Sale Order for LG Viewty Smart for qty 500 having Shipping Policy is 'Payment Before Delivery' - !record {model: sale.order, id: sale_order_so1}: @@ -354,7 +342,7 @@ - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_so1")) - assert so.picking_ids,"Picking has not been generated for sale_order_so1" + assert so.picking_ids,"Picking has not been generated" - Products are delivered to the Cleartrail Customer. - @@ -414,6 +402,10 @@ - !python {model: procurement.order}: | from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) + mod_brw = modules.browse(cr,uid,mod_mrp)[0] + assert (mod_brw.state == 'installed'),"mrp module is not installed" sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) @@ -421,45 +413,57 @@ - I verify that a manufacturing order has been generated - - !python {model: mrp.production}: | + !python {model: sale.order}: | from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - mnf_ids = self.search(cr, uid, [('origin','=',so.name)]) + modules = self.pool.get('ir.module.module') + mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) + mod_brw = modules.browse(cr,uid,mod_mrp)[0] + assert (mod_brw.state == 'installed'),"mrp module is not installed" + mrp_obj = self.pool.get('mrp.production') + so = self.browse(cr, uid, ref("sale_order_so1")) + mnf_ids = mrp_obj.search(cr, uid, [('origin','=',so.name)]) assert mnf_ids, _('Manufacturing order has not been generated') -- +- Manufacturing order has been generated - - !python {model: mrp.production}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) + mod_brw = modules.browse(cr,uid,mod_mrp)[0] + assert (mod_brw.state == 'installed'),"mrp module is not installed" + mrp_obj = self.pool.get('mrp.production') + so = self.browse(cr, uid, ref("sale_order_so1")) import netsvc wf_service = netsvc.LocalService("workflow") - mnf_ids = self.search(cr, uid, [('origin','=',so.name)]) + mnf_ids = mrp_obj.search(cr, uid, [('origin','=',so.name)]) for mnf in mnf_ids: wf_service.trg_validate(uid, 'mrp.production',mnf,'button_produce', cr) -- - Creating a mrp.product.produce record -- - !record {model: mrp.product.produce, id: mrp_product_produce_0}: - mode: consume_produce - product_qty: 500.0 - Then I click on the "Confirm" button - - !python {model: mrp.production}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) + mod_brw = modules.browse(cr,uid,mod_mrp)[0] + assert (mod_brw.state == 'installed'),"mrp module is not installed" + mrp_obj = self.pool.get('mrp.production') + so = self.browse(cr, uid, ref("sale_order_so1")) import netsvc wf_service = netsvc.LocalService("workflow") - mnf_ids = self.search(cr, uid, [('origin','=',so.name)]) + mnf_ids = mrp_obj.search(cr, uid, [('origin','=',so.name)]) for mnf in mnf_ids: wf_service.trg_validate(uid, 'mrp.production',mnf,'button_produce_done', cr) - - I verify that the manufacturing state is "done". + I verify that the manufacturing state is "done" - - !python {model: mrp.production}: | + !python {model: sale.order}: | from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) + mod_brw = modules.browse(cr,uid,mod_mrp)[0] + assert (mod_brw.state == 'installed'),"mrp module is not installed" sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) mnf_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','done')]) From bc72276f46ee222280db5baa998d13dbd859c10f Mon Sep 17 00:00:00 2001 From: mtr Date: Fri, 23 Jul 2010 11:56:13 +0530 Subject: [PATCH 4/7] [IMP] sale:-added the data_test.yml file and renamed and improved the yaml files for sale module bzr revid: mtr@mtr-20100723062613-q4vrsjcdsfya1gge --- addons/sale/__openerp__.py | 9 +- addons/sale/test/advance_invoice.yml | 420 +++++-------- addons/sale/test/data_test.yml | 290 +++++++++ addons/sale/test/invoice_from_picking.yml | 579 ----------------- addons/sale/test/manual_order_policy.yml | 339 ++++++++++ addons/sale/test/picking_order_policy.yml | 329 ++++++++++ addons/sale/test/postpaid_order_policy.yml | 330 ++++++++++ addons/sale/test/postpaid_sale_order.yml | 580 ------------------ addons/sale/test/prepaid_order_policy.yml | 284 +++++++++ addons/sale/test/prepaid_sale_order.yml | 482 --------------- .../sale/test/shipping_manual_sale_order.yml | 573 ----------------- addons/sale/test/so_make_line_invoice.yml | 493 ++++++--------- 12 files changed, 1925 insertions(+), 2783 deletions(-) create mode 100644 addons/sale/test/data_test.yml delete mode 100644 addons/sale/test/invoice_from_picking.yml create mode 100644 addons/sale/test/manual_order_policy.yml create mode 100644 addons/sale/test/picking_order_policy.yml create mode 100644 addons/sale/test/postpaid_order_policy.yml delete mode 100644 addons/sale/test/postpaid_sale_order.yml create mode 100644 addons/sale/test/prepaid_order_policy.yml delete mode 100644 addons/sale/test/prepaid_sale_order.yml delete mode 100644 addons/sale/test/shipping_manual_sale_order.yml diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index 7c125a806a3..dc74ca9f24e 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -69,10 +69,11 @@ ], 'demo_xml': ['sale_demo.xml','board_sale_demo.xml'], 'test': [ - 'test/shipping_manual_sale_order.yml', - 'test/postpaid_sale_order.yml', - 'test/prepaid_sale_order.yml', - 'test/invoice_from_picking.yml', + 'test/data_test.yml', + 'test/manual_order_policy.yml', + 'test/prepaid_order_policy.yml', + 'test/picking_order_policy.yml', + 'test/postpaid_order_policy.yml', 'test/advance_invoice.yml', 'test/so_make_line_invoice.yml', 'test/so_make_invoice.yml', diff --git a/addons/sale/test/advance_invoice.yml b/addons/sale/test/advance_invoice.yml index 8b93b031d39..871dac6abb9 100644 --- a/addons/sale/test/advance_invoice.yml +++ b/addons/sale/test/advance_invoice.yml @@ -1,269 +1,23 @@ - - In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer. -- - I am going to sell my Mobile products to the customer with name Cleartrail + In order to test the Deposit wizard of sale module in the Open-ERP, + I create a Sale Order for LG Viewty Smart for qty 100 having order_policy manual. - - I create View Account Type. -- - !record {model: account.account.type, id: account_account_type_view0}: - close_method: none - code: View - name: View - sign: 1 -- - I create Income Account Type. -- - !record {model: account.account.type, id: account_account_type_income0}: - close_method: unreconciled - code: Income - name: Income - sign: 1 -- - I create Expense Account Type. -- - !record {model: account.account.type, id: account_account_type_expense0}: - close_method: unreconciled - code: Expense - name: Expense - sign: 1 -- - I create Cash Account Type. -- - !record {model: account.account.type, id: account_account_type_cash0}: - close_method: balance - code: Cash - name: Cash - sign: 1 -- - I create Minimal Chart Account. -- - !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 -- - I create Payable Account. -- - !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 -- - I create Receivable Account. -- - !record {model: account.account, id: account_account_receivable0}: - code: AR - 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 -- - I create Cash Account. -- - !record {model: account.account, id: account_account_cash0}: - code: C - currency_mode: current - name: Cash - parent_id: account_account_minimalchart0 - parent_left: 6 - parent_right: 7 - type: other - user_type: account_account_type_cash0 -- - I create Purchases Account. -- - !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 -- - I create Sales Account. -- - !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 -- - I create Purchase Journal. -- - !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 -- - I create Sale Journal. -- - !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 -- - I create Bank Journal. -- - !record {model: account.journal, id: account_journal_bankjournal0}: - code: BNK - 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 -- - I create ir.property for account payable. -- - !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 -- - I create ir.property for account receivable. -- - !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 -- - I create Partner category Customers. -- - !record {model: res.partner.category, id: res_partner_category_customers0}: - name: Customers -- - I create Cleartrail Customer. -- - !record {model: res.partner, id: res_partner_cleartrail0}: - category_id: - - res_partner_category_customers0 - name: Cleartrail -- - I create contact address for Cleartrail. -- - !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 -- - I create invoice address for Cleartrail. -- - !record {model: res.partner.address, id: res_partner_address_2}: - partner_id: res_partner_cleartrail0 - street: sarda house 24 B palasia, A B Road - type: invoice -- - I create delivery address for Cleartrail. -- - !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 requirement regarding the stockable products. -- - I define product category Mobile Products Sellable. -- - !record {model: product.category, id: product_category_allproductssellable0}: - name: Mobile Products Sellable - - -- - I define product category Mobile Services. -- - !record {model: product.category, id: product_category_services0}: - name: Mobile Services -- - I define LG Viewty Smart product template. -- - !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 - -- - I define LG Viewty Smart product. -- - !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 -- - I create a Sale Order for LG Viewty Smart for qty 500 having order_policy prepaid. -- - !record {model: sale.order, id: sale_order_so0}: - date_order: '2010-05-03' + !record {model: sale.order, id: sale_order_so5}: + date_order: '2010-07-17' 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 + product_uom_qty: 100.0 state: draft delay: 7.0 product_id: sale.product_product_lgviewtysmart0 - product_uos_qty: 500.0 + product_uos_qty: 100.0 th_weight: 0.0 type: make_to_order - order_policy: prepaid + 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 @@ -271,28 +25,164 @@ picking_policy: direct pricelist_id: product.list0 shop_id: sale.shop - +- + I confirm the Sale Order. - - I use the Advance Payment wizard. + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so5} +- + I use the Advance Payment wizard. - !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 + Then I click on the "Create Partial Invoice" button - !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"), }) + "active_model": 'sale.order', "active_ids": [ref("sale_order_so5")], "tz": + False, "active_id": ref("sale_order_so5"), }) - - I will verify whether the invoice has been generated. + I verify whether the invoice has been generated. - !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" - - + so = self.browse(cr, uid, ref("sale_order_so5")) + assert so.invoice_ids, "Invoices has not been generated for sale_order_so5" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + 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) +- + I verify that an invoice state has transit from draft to open state +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','open')]) + assert invoice_id, "Invoice is not in the open state" +- + Creating a account invoice pay entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst0}: + amount: 3000.0 + date: '2010-07-17' + journal_id: sale.account_journal_bankjournal0 + name: test + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst0")], {"lang": "en_US", "active_model": "account.invoice", + "tz":False,"record_id": so.invoice_ids[0].id, "active_ids": [so.invoice_ids[0].id], "type": + "out_invoice", "active_id": so.invoice_ids[0].id}) +- + Creating an account invoice pay writeoff entry. +- + !record {model: account.invoice.pay.writeoff, id: account_invoice_pay_writeoff_5}: + analytic_id: account.analytic_customers + comment: Write-Off + writeoff_acc_id: account.a_sale + writeoff_journal_id: sale.account_journal_bankjournal0 +- + I verify that invoice has transit from Open to Done state +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','paid')]) + assert invoice_id, "Invoice for SO is not in done state." +- + I verify that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so5")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I click on "Create Invoice" button of Sales order to create the invoice. +- + !workflow {model: sale.order, action: manual_invoice, ref: sale_order_so5} +- + I verify whether the invoice has been generated for SO +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so5")) + assert so.invoice_ids[1], "Invoices has not been generated for sale_order_so5" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + 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) +- + I verify that an invoice state has transit from draft to open state +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','open')]) + assert invoice_id, "Invoice is not in the open state" +- + Creating a account invoice pay entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst2}: + amount: 14000.0 + date: '2010-07-22' + journal_id: sale.account_journal_bankjournal0 + name: test + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst2")], {"lang": "en_US", "active_model": "account.invoice", + "tz":False,"record_id": so.invoice_ids[1].id, "active_ids": [so.invoice_ids[1].id], "type": + "out_invoice", "active_id": so.invoice_ids[1].id}) +- + Creating an account invoice pay writeoff entry. +- + !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 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + 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[1].id], "type": "out_invoice", "active_id": so.invoice_ids[1].id}) +- + I verify that an invoice is in done state. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so5")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','paid')]) + assert invoice_id, "Invoice for SO is not in done state." +- + I verify that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so5")) + assert(sale_id.invoiced == True), "Paid has not been set to true" \ No newline at end of file diff --git a/addons/sale/test/data_test.yml b/addons/sale/test/data_test.yml new file mode 100644 index 00000000000..74b4c9ed7a6 --- /dev/null +++ b/addons/sale/test/data_test.yml @@ -0,0 +1,290 @@ +- + In order to test the sale module, I need to configure details regarding product,customer and account. +- + I am going to sell my Mobile products to the customer with name Cleartrail +- + I create View Account Type. +- + !record {model: account.account.type, id: account_account_type_view0}: + close_method: none + code: View + name: View + sign: 1 +- + I create Income Account Type. +- + !record {model: account.account.type, id: account_account_type_income0}: + close_method: unreconciled + code: Income + name: Income + sign: 1 +- + I create Expense Account Type. +- + !record {model: account.account.type, id: account_account_type_expense0}: + close_method: unreconciled + code: Expense + name: Expense + sign: 1 +- + I create Cash Account Type. +- + !record {model: account.account.type, id: account_account_type_cash0}: + close_method: balance + code: Cash + name: Cash + sign: 1 +- + I create Minimal Chart Account. +- + !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 +- + I create Payable Account. +- + !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 +- + I create Receivable Account. +- + !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 +- + I create Cash Account. +- + !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 +- + I create Purchases Account. +- + !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 +- + I create Sales Account. +- + !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 +- + I create Purchase Journal. +- + !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 +- + I create Sale Journal. +- + !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 +- + I create Bank Journal. +- + !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 +- + I create ir.property for account payable. +- + !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 +- + I create ir.property for account receivable. +- + !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 +- + I create Partner category Customers. +- + !record {model: res.partner.category, id: res_partner_category_customers0}: + name: Customers +- + I create Cleartrail Customer. +- + !record {model: res.partner, id: res_partner_cleartrail0}: + category_id: + - res_partner_category_customers0 + name: Cleartrail +- + I create contact address for Cleartrail. +- + !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 +- + I create invoice address for Cleartrail. +- + !record {model: res.partner.address, id: res_partner_address_2}: + partner_id: res_partner_cleartrail0 + street: sarda house 24 B palasia, A B Road + type: invoice +- + I create delivery address for Cleartrail. +- + !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 requirement regarding the stockable products. +- + I define product category Mobile Products Sellable. +- + !record {model: product.category, id: product_category_allproductssellable0}: + name: Mobile Products Sellable +- + I define product category Mobile Services. +- + !record {model: product.category, id: product_category_services0}: + name: Mobile Services +- + I define LG Viewty Smart product template. +- + !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 +- + I define LG Viewty Smart product. +- + !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' + seller_ids: + - delay: 1 + name: base.res_partner_agrolait + qty: 5.0 + standard_price: 160.0 + supply_method: produce + type: product + uom_id: product.product_uom_unit + uom_po_id: product.product_uom_unit +- + I define Slider Mobile template. +- + !record {model: product.template, id: product_template_slidermobile0}: + categ_id: product_category_allproductssellable0 + cost_method: standard + list_price: 200.0 + mes_type: fixed + name: 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 +- + I define Slider Mobile. +- + !record {model: product.product, id: product_product_slidermobile0}: + categ_id: product_category_allproductssellable0 + cost_method: standard + list_price: 200 + mes_type: fixed + name: Slider Mobile + pricelist_purchase: 'Default Purchase Pricelist (0.00) : 500.0.00\n' + pricelist_sale: 'Public Pricelist (0.00) : 510.00\n' + procure_method: make_to_order + property_account_expense: sale.account_account_payable1 + property_account_income: sale.account_account_receivable0 + seller_delay: '1' + seller_ids: + - delay: 1 + name: base.res_partner_agrolait + qty: 5.0 + standard_price: 189.0 + supply_method: buy + type: product + uom_id: product.product_uom_unit + uom_po_id: product.product_uom_unit diff --git a/addons/sale/test/invoice_from_picking.yml b/addons/sale/test/invoice_from_picking.yml deleted file mode 100644 index a13120dc5a7..00000000000 --- a/addons/sale/test/invoice_from_picking.yml +++ /dev/null @@ -1,579 +0,0 @@ -- - In order to test the sale module, I need to configure details regarding product & customer. -- - I am going to sell my Mobile products to the customer with name Cleartrail -- - I create View Account Type. -- - !record {model: account.account.type, id: account_account_type_view0}: - close_method: none - code: View - name: View - sign: 1 -- - I create Income Account Type. -- - !record {model: account.account.type, id: account_account_type_income0}: - close_method: unreconciled - code: Income - name: Income - sign: 1 -- - I create Expense Account Type. -- - !record {model: account.account.type, id: account_account_type_expense0}: - close_method: unreconciled - code: Expense - name: Expense - sign: 1 -- - I create Cash Account Type. -- - !record {model: account.account.type, id: account_account_type_cash0}: - close_method: balance - code: Cash - name: Cash - sign: 1 -- - I create Minimal Chart Account. -- - !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 -- - I create Payable Account. -- - !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 -- - I create Receivable Account. -- - !record {model: account.account, id: account_account_receivable1}: - code: AR1 - 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 -- - I create Cash Account. -- - !record {model: account.account, id: account_account_cash2}: - code: C2 - 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 -- - I create Purchases Account. -- - !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 -- - I create Sales Account. -- - !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 -- - I create Purchase Journal. -- - !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 -- - I create Sale Journal. -- - !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 -- - I create Bank Journal. -- - !record {model: account.journal, id: account_journal_bankjournal2}: - code: BNK - company_id: base.main_company - default_credit_account_id: account_account_cash2 - default_debit_account_id: account_account_cash2 - name: Bank Journal - sequence_id: account.sequence_journal - type: cash - view_id: account.account_journal_bank_view -- - I create ir.property for account payable. -- - !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 -- - I create ir.property for account receivable. -- - !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 -- - I create Partner category Customers. -- - !record {model: res.partner.category, id: res_partner_category_customers0}: - name: Customers -- - I create Cleartrail Customer. -- - !record {model: res.partner, id: res_partner_cleartrail0}: - category_id: - - res_partner_category_customers0 - name: Cleartrail -- - I create contact address for Cleartrail. -- - !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 -- - I create invoice address for Cleartrail. -- - !record {model: res.partner.address, id: res_partner_address_2}: - partner_id: res_partner_cleartrail0 - street: sarda house 24 B palasia, A B Road - type: invoice -- - I create delivery address for Cleartrail. -- - !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 requirement regarding the stockable products. -- - I define product category Mobile Products Sellable. -- - !record {model: product.category, id: product_category_allproductssellable0}: - name: Mobile Products Sellable -- - I define product category Mobile Services. -- - !record {model: product.category, id: product_category_services0}: - name: Mobile Services -- - I define Slider Mobile template. -- - !record {model: product.template, id: product_template_slidermobile0}: - categ_id: product_category_allproductssellable0 - cost_method: standard - list_price: 510.0 - mes_type: fixed - name: Slider Mobile - procure_method: make_to_order - standard_price: 500.0 - supply_method: buy - type: product - uom_id: product.product_uom_unit - uom_po_id: product.product_uom_unit -- - I define Slider Mobile. -- - !record {model: product.product, id: product_product_slidermobile0}: - categ_id: product_category_allproductssellable0 - cost_method: standard - list_price: 510.0 - mes_type: fixed - name: Slider Mobile - pricelist_purchase: 'Default Purchase Pricelist (0.00) : 500.0.00\n' - pricelist_sale: 'Public Pricelist (0.00) : 510.00\n' - procure_method: make_to_order - property_account_expense: sale.account_account_payable1 - property_account_income: sale.account_account_receivable1 - seller_delay: '1' - seller_ids: - - delay: 1 - name: base.res_partner_agrolait - qty: 5.0 - standard_price: 500.0 - supply_method: buy - type: product - uom_id: product.product_uom_unit - uom_po_id: product.product_uom_unit -- - I create a Sale Order for Slider Mobile for qty 500 having Shipping Policy is 'Invoice from Picking' -- - !record {model: sale.order, id: sale_order_so7}: - date_order: '2010-07-15' - invoice_quantity: order - name: Test_SO007 - order_line: - - name: Slider Mobile - price_unit: 510.0 - product_uom: product.product_uom_unit - product_uom_qty: 500.0 - state: draft - delay: 7.0 - product_id: sale.product_product_slidermobile0 - product_uos_qty: 500.0 - th_weight: 0.0 - type: make_to_order - order_policy: picking - 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 -- - I confirm the sale order. -- - !workflow {model: sale.order, action: order_confirm, ref: sale_order_so7} -- - I verify that picking has been generated for the sale order. -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so7")) - assert so.picking_ids,"Picking has not been generated for sale_order_so0" -- - Then I done the picking -- - !python {model: stock.picking }: | - import time - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - 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, - } - self.do_partial(cr, uid, [pick.id],partial_datas) -- - Then I create invoice from picking -- - !record {model: stock.invoice.onshipping, id: stock_invoice_onshipping_0}: - invoice_date: '2010-07-15' - journal_id: account.sales_journal - type: out_invoice -- - Then I click on 'Create Invoices' button -- - !python {model: stock.invoice.onshipping}: | - sale_obj=self.pool.get('sale.order') - sale_id=sale_obj.browse(cr, uid, ref("sale_order_so7")) - picking_obj = self.pool.get('stock.picking') - ids = picking_obj.search(cr, uid, [('origin', '=', sale_id.name)]) - self.create_invoice(cr, uid, [ref("stock_invoice_onshipping_0")], {"lang": "en_US", - "search_default_available": 1, "tz": False, "active_model": "stock.picking", - "contact_display": "partner", "active_ids": ids, "active_id": ids[0]}) -- - I check that an invoice has been created. -- - !python {model: sale.order}: | - sale_id=self.browse(cr, uid, ref("sale_order_so7")) - assert(sale_id.invoice_ids), "Invoice has not been created" -- - I open the Invoice for the SO. -- - !python {model: account.invoice}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - 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 entry. -- - !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: - amount: 255000.0 - date: '2010-07-15' - journal_id: sale.account_journal_bankjournal2 - name: tst - period_id: account.period_5 -- - I pay the invoice. -- - !python {model: account.invoice.pay}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"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 an account invoice pay writeoff entry. -- - !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_bankjournal2 -- - Pay and Reconcile the Invoice. -- - !python {model: account.invoice.pay.writeoff}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - 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_so7")) - invoice_ids = so.invoice_ids - for invoice in invoice_ids: - assert (invoice.state) =='paid', "Invoice for SO is not in done state." -- - I check that Paid has been set to true. -- - !python {model: sale.order}: | - sale_id=self.browse(cr, uid, ref("sale_order_so7")) - assert(sale_id.invoiced == True), "Paid has not been set to true" -- - I verify that a procurement has been generated for so -- - !python {model: procurement.order}: | - from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - assert proc_ids, _('No Procurements!') -- - Then I click on the "Run Procurement" button -- - !python {model: procurement.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - import netsvc - wf_service = netsvc.LocalService("workflow") - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - for proc in proc_ids: - wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) -- - I verify that a procurement state is "running" -- - !python {model: procurement.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) - assert proc_ids, _('Procurement is not in the running state!') -- - I verify that a purchase order has been generated -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase order has not been generated" - so = self.browse(cr, uid, ref("sale_order_so7")) - pur_obj=self.pool.get('purchase.order') - pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) - assert pur_id, _('Purchase order has not been generated') -- - I click on the "Confirm" button to confirm the purchase order -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase order has not been generated" - pur_obj=self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so7")) - import netsvc - wf_service = netsvc.LocalService("workflow") - pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) - for pur in pur_ids: - wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) -- - I click on the "Approved by supplier" button to approve the purchase order -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase order has not been generated" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so7")) - import netsvc - wf_service = netsvc.LocalService("workflow") - pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) - for pur in pur_ids: - wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) -- - I verify that a picking related to purchase order has been generated. -- - !python {model: sale.order}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase order has not been generated" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so7")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - assert(po.picking_ids),"Picking for purchase order has not been generated" -- - Then I click on the "Products Received" button of Incoming Shipments -- - !record {model: stock.partial.picking, id: stock_partial_picking_0}: - date: '2010-07-15 17:52:09' -- - I click on the "Validate" button -- - !python {model: stock.picking}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase order has not been generated" - sale_order_obj = self.pool.get('sale.order') - pur_obj = self.pool.get('purchase.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) - import netsvc - wf_service = netsvc.LocalService("workflow") - for pick in pick_ser_id: - wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) -- - I verify that picking for purchase order has been done. -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase order has not been generated" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so7")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - picking_obj = self.pool.get('stock.picking') - ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) - assert ids, _('Picking is not in the done state!') -- - I verify that delivery order has been generated for sale order -- - !python {model: stock.picking }: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) - assert (picking_id),"Delivery order has not been generated" -- - I verify that delivery has been done -- - !python {model: stock.picking }: | - import time - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) - 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, [pick.id],partial_datas) -- - I verify that delivery state is done -- - !python {model: stock.picking }: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) - picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) - if picking_id: - pick = self.browse(cr,uid,picking_id[0]) - assert (pick.state) =='done', "Picking for SO is not in done state." -- - I verify that a "Picked" has been set to true -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so7")) - assert (so.shipped == True), "Picked has not been set to True" -- - I verify that a sale order is in done state -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so7")) - assert (so.state == 'done'), "Sale order is not in the done state." - diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml new file mode 100644 index 00000000000..73584a54040 --- /dev/null +++ b/addons/sale/test/manual_order_policy.yml @@ -0,0 +1,339 @@ +- + In order to test the Sale module in OpenERP, + I create a Sale Order for Slider Mobile for 500 quantity having Shipping Policy 'Shipping & Manual Invoice' +- + !record {model: sale.order, id: sale_order_so0}: + date_order: '2010-07-17' + invoice_quantity: order + name: Test_SO002 + order_line: + - name: Slider Mobile + price_unit: 200 + product_uom: product.product_uom_unit + product_uom_qty: 500.0 + state: draft + delay: 7.0 + product_id: sale.product_product_slidermobile0 + 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 +- + I confirm the Sale Order. +- + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so0} +- + I click on Create Invoice button to create the invoice. +- + !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" +- + I open the Invoice for the SO. +- + !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) +- + I verify that an invoice state has transit from draft to open state +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','open')]) + assert invoice_id, "Invoice is not in the open state" +- + I verify that its Journal Entries has been created +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','open')]) + inv_brw = self.browse(cr, uid, invoice_id)[0] + assert inv_brw.move_id, "Journal Entries has not been created" +- + Creating a account invoice pay entry. +- + !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 +- + I pay the invoice. +- + !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", "active_model": "account.invoice", + "tz":False,"record_id": so.invoice_ids[0].id, "active_ids": [so.invoice_ids[0].id], "type": + "out_invoice", "active_id": so.invoice_ids[0].id}) +- + Creating an account invoice pay writeoff entry. +- + !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 +- + Pay and Reconcile the Invoice. +- + !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 is in done state. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','paid')]) + assert invoice_id, "Invoice for SO is not in done state." +- + I verify that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so0")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I verify that the picking has been generated for the sale order +- + !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" +- + I verify that delivery order has been generated for sale order +- + !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','=','delivery')]) + assert (picking_id),"Delivery order has not been generated" +- + I verify that a procurement has been generated for so +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('No Procurements!') +- + Then I click on the "Run Procurement" button +- + !python {model: procurement.order}: | + 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") + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + for proc in proc_ids: + wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) +- + I verify that a procurement state is "running" +- + !python {model: procurement.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) + assert proc_ids, _('Procurement is not in the running state!') +- + I verify that a purchase order has been generated +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if(mod_brw.state == 'installed'): + so = self.browse(cr, uid, ref("sale_order_so0")) + pur_obj=self.pool.get('purchase.order') + pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) + assert pur_id, _('Purchase order has not been generated') + +- + I click on the "Confirm" button to confirm the purchase order +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if(mod_brw.state == 'installed'): + pur_obj=self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so0")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) +- + I click on the "Approved by supplier" button to approve the purchase order +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so0")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) +- + I verify that a picking related to purchase order has been generated. +- + !python {model: sale.order}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so0")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + assert(po.picking_ids),"Picking for purchase order has not been generated" +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-13 17:52:09' +- + I click on the "Validate" button +- + !python {model: stock.picking}: | + modules = self.pool.get('ir.module.module') + sale_order_obj = self.pool.get('sale.order') + pur_obj = self.pool.get('purchase.order') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) + import netsvc + wf_service = netsvc.LocalService("workflow") + for pick in pick_ser_id: + wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) +- + I verify that picking for purchase order has been done. +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if(mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so0")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) + assert ids, _('Picking is not in the done state!') +- + Then I done the picking +- + !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, + } + self.do_partial(cr, uid, [pick.id],partial_datas) +- + I verify that picking for sale 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')]) + pick = self.browse(cr,uid,picking_id[0]) + assert (pick.state) =='done', "Picking for SO is not in done state." +- + Then I done the delivery order +- + !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','=','delivery')]) + 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, [pick.id],partial_datas) +- + I verify that delivery state is done +- + !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','=','delivery')]) + pick = self.browse(cr,uid,picking_id[0]) + assert (pick.state) =='done', "Picking for SO is not in done state." +- + I verify that a "Picked" has been set to true +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so0")) + assert (so.shipped == True), "Picked has not been set to True" +- + I verify that a sale order is in done state +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so0")) + assert (so.state == 'done'), "Sale order is not in the done state." diff --git a/addons/sale/test/picking_order_policy.yml b/addons/sale/test/picking_order_policy.yml new file mode 100644 index 00000000000..d973f31d1f3 --- /dev/null +++ b/addons/sale/test/picking_order_policy.yml @@ -0,0 +1,329 @@ +- + In order to test the Sale module in OpenERP, + I create a Sale Order for Slider Mobile for qty 500 having Shipping Policy is 'Invoice from Picking' +- + !record {model: sale.order, id: sale_order_so7}: + date_order: '2010-07-15' + invoice_quantity: order + name: Test_SO007 + order_line: + - name: Slider Mobile + price_unit: 200 + product_uom: product.product_uom_unit + product_uom_qty: 500.0 + state: draft + delay: 7.0 + product_id: sale.product_product_slidermobile0 + product_uos_qty: 500.0 + th_weight: 0.0 + type: make_to_order + order_policy: picking + 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 +- + I confirm the sale order. +- + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so7} +- + I verify that picking has been generated for the sale order. +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so7")) + assert so.picking_ids,"Picking has not been generated for sale_order_so7" +- + Then I done the picking +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + 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, + } + self.do_partial(cr, uid, [pick.id],partial_datas) +- + Then I create invoice from picking +- + !record {model: stock.invoice.onshipping, id: stock_invoice_onshipping_0}: + invoice_date: '2010-07-15' + journal_id: account.sales_journal + type: out_invoice +- + Then I click on 'Create Invoices' button +- + !python {model: stock.invoice.onshipping}: | + sale_obj=self.pool.get('sale.order') + sale_id=sale_obj.browse(cr, uid, ref("sale_order_so7")) + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('origin', '=', sale_id.name)]) + self.create_invoice(cr, uid, [ref("stock_invoice_onshipping_0")], {"lang": "en_US", + "search_default_available": 1, "tz": False, "active_model": "stock.picking", + "contact_display": "partner", "active_ids": ids, "active_id": ids[0]}) +- + I check that an invoice has been created. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so7")) + assert(sale_id.invoice_ids), "Invoice has not been created" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + 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 entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: + amount: 255000.0 + date: '2010-07-15' + journal_id: sale.account_journal_bankjournal0 + name: tst + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"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 an account invoice pay writeoff entry. +- + !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 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + 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_so7")) + invoice_ids = so.invoice_ids + for invoice in invoice_ids: + assert (invoice.state) =='paid', "Invoice for SO is not in done state." +- + I check that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so7")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I verify that a procurement has been generated for so +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('No Procurements!') +- + Then I click on the "Run Procurement" button +- + !python {model: procurement.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + import netsvc + wf_service = netsvc.LocalService("workflow") + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + for proc in proc_ids: + wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) +- + I verify that a procurement state is "running" +- + !python {model: procurement.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) + assert proc_ids, _('Procurement is not in the running state!') +- + I verify that a purchase order has been generated +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + so = self.browse(cr, uid, ref("sale_order_so7")) + pur_obj=self.pool.get('purchase.order') + pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) + assert pur_id, _('Purchase order has not been generated') +- + I click on the "Confirm" button to confirm the purchase order +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj=self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so7")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) +- + I click on the "Approved by supplier" button to approve the purchase order +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so7")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) +- + I verify that a picking related to purchase order has been generated. +- + !python {model: sale.order}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so7")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + assert(po.picking_ids),"Picking for purchase order has not been generated" +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-15 17:52:09' +- + I click on the "Validate" button +- + !python {model: stock.picking}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + pur_obj = self.pool.get('purchase.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) + import netsvc + wf_service = netsvc.LocalService("workflow") + for pick in pick_ser_id: + wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) +- + I verify that picking for purchase order has been done. +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so7")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) + assert ids, _('Picking is not in the done state!') +- + I verify that delivery order has been generated for sale order +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + assert (picking_id),"Delivery order has not been generated" +- + I verify that delivery has been done +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + 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, [pick.id],partial_datas) +- + I verify that delivery state is done +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so7")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + if picking_id: + pick = self.browse(cr,uid,picking_id[0]) + assert (pick.state) =='done', "Picking for SO is not in done state." +- + I verify that a "Picked" has been set to true +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so7")) + assert (so.shipped == True), "Picked has not been set to True" +- + I verify that a sale order is in done state +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so7")) + assert (so.state == 'done'), "Sale order is not in the done state." + diff --git a/addons/sale/test/postpaid_order_policy.yml b/addons/sale/test/postpaid_order_policy.yml new file mode 100644 index 00000000000..056a8327435 --- /dev/null +++ b/addons/sale/test/postpaid_order_policy.yml @@ -0,0 +1,330 @@ +- + In order to test the Sale module in OpenERP, + I create a Sale Order for Slider Mobile for qty 500 having Shipping Policy is 'Invoice on order after Delivery' +- + !record {model: sale.order, id: sale_order_so8}: + date_order: '2010-07-15' + invoice_quantity: order + name: Test_SO008 + order_line: + - name: 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_slidermobile0 + product_uos_qty: 500.0 + type: make_to_order + order_policy: postpaid + 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 +- + I confirm the Sale Order. +- + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so8} +- + I verify that the picking has been generated for the sale order +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert so.picking_ids,"Picking has not been generated for sale_order_so8" +- + Then I done the picking +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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, + } + self.do_partial(cr, uid, [pick.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_so8")) + 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." +- + I verify that delivery order has been generated for sale order +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + assert (picking_id),"Delivery order has not been generated" +- + I click on the Products Sent button and then on the Validate button +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + 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, [pick.id],partial_datas) +- + I verify that delivery state is done +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) + if picking_id: + pick = self.browse(cr,uid,picking_id[0]) + assert (pick.state) =='done', "Picking for SO is not in done state." +- + I verify that a procurement has been generated for so +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('No Procurements!') +- + Then I click on the "Run Procurement" button +- + !python {model: procurement.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + import netsvc + wf_service = netsvc.LocalService("workflow") + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + for proc in proc_ids: + wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) +- + I verify that a procurement state is "running" +- + !python {model: procurement.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) +- + I verify that a purchase order has been generated +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + so = self.browse(cr, uid, ref("sale_order_so8")) + pur_obj=self.pool.get('purchase.order') + pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) + assert pur_id, _('Purchase order has not been generated') +- + I click on the "Confirm" button to confirm the purchase order +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj=self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so8")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) +- + I click on the "Approved by supplier" button to approve the purchase order +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so8")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) +- + I verify that a picking related to purchase order has been generated. +- + !python {model: sale.order}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so8")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + assert(po.picking_ids),"Picking for purchase order has not been generated" +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-15 17:52:09' +- + I click on the "Validate" button +- + !python {model: stock.picking}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + pur_obj = self.pool.get('purchase.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) + import netsvc + wf_service = netsvc.LocalService("workflow") + for pick in pick_ser_id: + wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) +- + I verify that picking for purchase order has been done. +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so8")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) + assert ids, _('Picking is not in the done state!') +- + I verify that a "Picked" has been set to true +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert (so.shipped == True), "Picking is not done." +- + I verify that an invoice has been generated for SO +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert so.invoice_ids, "Invoice has not been generated" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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 entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst0}: + amount: 100000.0 + date: '2010-07-15' + journal_id: sale.account_journal_bankjournal0 + name: test + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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 an account invoice pay writeoff entry. +- + !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 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + invoice_ids = so.invoice_ids + for invoice in invoice_ids: + assert (invoice.state) =='paid', "Invoice for SO is not in done state." +- + I verify that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so8")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I verify that sale order is in done state +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert (so.state == 'done'), "Sale order is not in the done state." \ No newline at end of file diff --git a/addons/sale/test/postpaid_sale_order.yml b/addons/sale/test/postpaid_sale_order.yml deleted file mode 100644 index c16a2a3895f..00000000000 --- a/addons/sale/test/postpaid_sale_order.yml +++ /dev/null @@ -1,580 +0,0 @@ -- - In order to test the sale module, I need to configure details regarding product & customer. -- - I am going to sell my Mobile products to the customer with name Cleartrail -- - I create View Account Type. -- - !record {model: account.account.type, id: account_account_type_view0}: - close_method: none - code: View - name: View - sign: 1 -- - I create Income Account Type. -- - !record {model: account.account.type, id: account_account_type_income0}: - close_method: unreconciled - code: Income - name: Income - sign: 1 -- - I create Expense Account Type. -- - !record {model: account.account.type, id: account_account_type_expense0}: - close_method: unreconciled - code: Expense - name: Expense - sign: 1 -- - I create Cash Account Type. -- - !record {model: account.account.type, id: account_account_type_cash0}: - close_method: balance - code: Cash - name: Cash - sign: 1 -- - I create Minimal Chart Account. -- - !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 -- - I create Payable Account. -- - !record {model: account.account, id: account_account_payable2}: - code: AP2 - 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 -- - I create Receivable Account. -- - !record {model: account.account, id: account_account_receivable2}: - code: AR2 - 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 -- - I create Cash Account. -- - !record {model: account.account, id: account_account_cash1}: - code: CASH - 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 -- - I create Purchases Account. -- - !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 -- - I create Sales Account. -- - !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 -- - I create Purchase Journal. -- - !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 -- - I create Sale Journal. -- - !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 -- - I create Bank Journal. -- - !record {model: account.journal, id: account_journal_bankjournal1}: - code: BNK - company_id: base.main_company - default_credit_account_id: account_account_cash1 - default_debit_account_id: account_account_cash1 - name: Bank Journal - sequence_id: account.sequence_journal - type: cash - view_id: account.account_journal_bank_view -- - I create ir.property for account payable. -- - !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 -- - I create ir.property for account receivable. -- - !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 -- - I create Partner category Customers. -- - !record {model: res.partner.category, id: res_partner_category_customers0}: - name: Customers -- - I create Cleartrail Customer. -- - !record {model: res.partner, id: res_partner_cleartrail0}: - category_id: - - res_partner_category_customers0 - name: Cleartrail -- - I create contact address for Cleartrail. -- - !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 -- - I create invoice address for Cleartrail. -- - !record {model: res.partner.address, id: res_partner_address_2}: - partner_id: res_partner_cleartrail0 - street: sarda house 24 B palasia, A B Road - type: invoice -- - I create delivery address for Cleartrail. -- - !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 requirement regarding the stockable products. -- - I define product category Mobile Products Sellable. -- - !record {model: product.category, id: product_category_allproductssellable0}: - name: Mobile Products Sellable -- - I define product category Mobile Services. -- - !record {model: product.category, id: product_category_services0}: - name: Mobile Services -- - I define New Slider Mobile template. -- - !record {model: product.template, id: product_template_newslidermobile0}: - categ_id: product_category_allproductssellable0 - cost_method: standard - list_price: 200.0 - mes_type: fixed - name: New 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 -- - I define New Slider Mobile. -- - !record {model: product.product, id: product_product_newslidermobile0}: - categ_id: product_category_allproductssellable0 - cost_method: standard - list_price: 200.0 - mes_type: fixed - name: New 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_payable2 - property_account_income: sale.account_account_receivable2 - seller_delay: '1' - seller_ids: - - delay: 1 - name: base.res_partner_agrolait - qty: 5.0 - standard_price: 189.0 - supply_method: buy - type: product - uom_id: product.product_uom_unit - uom_po_id: product.product_uom_unit -- - I create a Sale Order for New Slider Mobile for qty 500 having Shipping Policy is 'Invoice on order after Delivery' -- - !record {model: sale.order, id: sale_order_so8}: - date_order: '2010-07-15' - invoice_quantity: order - name: Test_SO008 - order_line: - - name: New 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_newslidermobile0 - product_uos_qty: 500.0 - type: make_to_order - order_policy: postpaid - 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 -- - I confirm the Sale Order. -- - !workflow {model: sale.order, action: order_confirm, ref: sale_order_so8} -- - I verify that the picking has been generated for the sale order -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so8")) - assert so.picking_ids,"Picking has not been generated for sale_order_so8" -- - Then I done the picking -- - !python {model: stock.picking }: | - import time - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - 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, - } - self.do_partial(cr, uid, [pick.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_so8")) - 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." -- - I verify that delivery order has been generated for sale order -- - !python {model: stock.picking }: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) - assert (picking_id),"Delivery order has not been generated" -- - I click on the Products Sent button and then on the Validate button -- - !python {model: stock.picking }: | - import time - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) - 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, [pick.id],partial_datas) -- - I verify that delivery state is done -- - !python {model: stock.picking }: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')]) - if picking_id: - pick = self.browse(cr,uid,picking_id[0]) - assert (pick.state) =='done', "Picking for SO is not in done state." -- - I verify that a procurement has been generated for so -- - !python {model: procurement.order}: | - from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - assert proc_ids, _('No Procurements!') -- - Then I click on the "Run Procurement" button -- - !python {model: procurement.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - import netsvc - wf_service = netsvc.LocalService("workflow") - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - for proc in proc_ids: - wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) -- - I verify that a procurement state is "running" -- - !python {model: procurement.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) -- - I verify that a purchase order has been generated -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - so = self.browse(cr, uid, ref("sale_order_so8")) - pur_obj=self.pool.get('purchase.order') - pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) - assert pur_id, _('Purchase order has not been generated') -- - I click on the "Confirm" button to confirm the purchase order -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - pur_obj=self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so8")) - import netsvc - wf_service = netsvc.LocalService("workflow") - pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) - for pur in pur_ids: - wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) -- - I click on the "Approved by supplier" button to approve the purchase order -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so8")) - import netsvc - wf_service = netsvc.LocalService("workflow") - pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) - for pur in pur_ids: - wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) -- - I verify that a picking related to purchase order has been generated. -- - !python {model: sale.order}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so8")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - assert(po.picking_ids),"Picking for purchase order has not been generated" -- - Then I click on the "Products Received" button of Incoming Shipments -- - !record {model: stock.partial.picking, id: stock_partial_picking_0}: - date: '2010-07-15 17:52:09' -- - I click on the "Validate" button -- - !python {model: stock.picking}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - sale_order_obj = self.pool.get('sale.order') - pur_obj = self.pool.get('purchase.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) - import netsvc - wf_service = netsvc.LocalService("workflow") - for pick in pick_ser_id: - wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) -- - I verify that picking for purchase order has been done. -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so8")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - picking_obj = self.pool.get('stock.picking') - ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) - assert ids, _('Picking is not in the done state!') -- - I verify that a "Picked" has been set to true -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so8")) - assert (so.shipped == True), "Picking is not done." -- - I verify that an invoice has been generated for SO -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so8")) - assert so.invoice_ids, "Invoice has not been generated" -- - I open the Invoice for the SO. -- - !python {model: account.invoice}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - 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 entry. -- - !record {model: account.invoice.pay, id: account_invoice_pay_tst0}: - amount: 100000.0 - date: '2010-07-15' - journal_id: sale.account_journal_bankjournal1 - name: test - period_id: account.period_5 -- - I pay the invoice. -- - !python {model: account.invoice.pay}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Invoice has not been generated" - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - 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 an account invoice pay writeoff entry. -- - !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_bankjournal1 -- - Pay and Reconcile the Invoice. -- - !python {model: account.invoice.pay.writeoff}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Invoice has not been generated" - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - 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}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Invoice has not been generated" - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) - invoice_ids = so.invoice_ids - for invoice in invoice_ids: - assert (invoice.state) =='paid', "Invoice for SO is not in done state." -- - I verify that Paid has been set to true. -- - !python {model: sale.order}: | - sale_id=self.browse(cr, uid, ref("sale_order_so8")) - assert(sale_id.invoiced == True), "Paid has not been set to true" -- - I verify that sale order is in done state -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so8")) - assert (so.state == 'done'), "Sale order is not in the done state." \ No newline at end of file diff --git a/addons/sale/test/prepaid_order_policy.yml b/addons/sale/test/prepaid_order_policy.yml new file mode 100644 index 00000000000..97e435ef5c9 --- /dev/null +++ b/addons/sale/test/prepaid_order_policy.yml @@ -0,0 +1,284 @@ +- + I create a Sale Order for LG Viewty Smart for qty 500 having Shipping Policy is 'Payment Before Delivery' +- + !record {model: sale.order, id: sale_order_so1}: + date_order: '2010-05-03' + invoice_quantity: order + name: Test_SO001 + order_line: + - name: Slider Mobile + price_unit: 200 + product_uom: product.product_uom_unit + product_uom_qty: 500.0 + state: draft + delay: 7.0 + product_id: sale.product_product_slidermobile0 + 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 +- + I confirm the sale order. +- + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so1} +- + I 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_so1")) + assert so.invoice_ids, "Invoices has not been generated for sale_order_so1" +- + I verify there are no pickings attached to this sale order +- + !python {model: stock.picking }: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + picking_id = self.search(cr, uid, [('origin','!=',so.name),(('type','=','out')and('type','=','delivery'))]) + assert picking_id,"There is a picking attached to this sale order" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + 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 entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: + amount: 85000.0 + date: '2010-05-10' + journal_id: sale.account_journal_bankjournal0 + name: tst + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"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 an account invoice pay writeoff entry. +- + !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 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + 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 is in done 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_so1")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','paid')]) + assert invoice_id, "Invoice for SO is not in done state." +- + I check that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so1")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I verify the picking associated with the sale order sale_order_so1 +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so1")) + assert so.picking_ids,"Picking has not been generated" +- + Products are delivered to the Cleartrail Customer. +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + 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, + } + self.do_partial(cr, uid, [pick.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_so1")) + picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')]) + pick = self.browse(cr,uid,picking_id[0]) + assert (pick.state) =='done', "Picking for SO is not in done state." +- + I verify that a procurement has been generated for so +- + !python {model: procurement.order}: | + from tools.translate import _ + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + assert proc_ids, _('No Procurements!') +- + Then I click on the "Run Procurement" button +- + !python {model: procurement.order}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + import netsvc + wf_service = netsvc.LocalService("workflow") + proc_ids = self.search(cr, uid, [('origin','=',so.name)]) + for proc in proc_ids: + wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) +- + I verify that a procurement state is "running" +- + !python {model: procurement.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if(mod_brw.state == 'installed'): + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) + assert proc_ids, _('Procurement is not in the running state!') +- + I verify that a purchase order has been generated +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if(mod_brw.state == 'installed'): + so = self.browse(cr, uid, ref("sale_order_so1")) + pur_obj=self.pool.get('purchase.order') + pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) + assert pur_id, _('Purchase order has not been generated') +- + I click on the "Confirm" button to confirm the purchase order +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if(mod_brw.state == 'installed'): + pur_obj=self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so1")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) +- + I click on the "Approved by supplier" button to approve the purchase order +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so1")) + import netsvc + wf_service = netsvc.LocalService("workflow") + pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) + for pur in pur_ids: + wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) +- + I verify that a picking related to purchase order has been generated. +- + !python {model: sale.order}: | + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so1")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + assert(po.picking_ids),"Picking for purchase order has not been generated" +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-13 17:52:09' +- + I click on the "Validate" button +- + !python {model: stock.picking}: | + modules = self.pool.get('ir.module.module') + sale_order_obj = self.pool.get('sale.order') + pur_obj = self.pool.get('purchase.order') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if (mod_brw.state == 'installed'): + so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) + import netsvc + wf_service = netsvc.LocalService("workflow") + for pick in pick_ser_id: + wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) +- + I verify that picking for purchase order has been done. +- + !python {model: sale.order}: | + from tools.translate import _ + modules = self.pool.get('ir.module.module') + mod_pur = modules.search(cr, uid, [('name','=','purchase')]) + mod_brw = modules.browse(cr,uid,mod_pur)[0] + if(mod_brw.state == 'installed'): + pur_obj = self.pool.get('purchase.order') + so = self.browse(cr, uid, ref("sale_order_so1")) + pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) + po = pur_obj.browse(cr, uid, pur_id)[0] + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) + assert ids, _('Picking is not in the done state!') +- + I verify that a "Picked" has been set to true +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so1")) + assert (so.shipped == True), "Picking is not done." +- + I verify that a sale order is in done state +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so1")) + assert (so.state == 'done'), "Sale order is not in the done state." diff --git a/addons/sale/test/prepaid_sale_order.yml b/addons/sale/test/prepaid_sale_order.yml deleted file mode 100644 index 18b090e823a..00000000000 --- a/addons/sale/test/prepaid_sale_order.yml +++ /dev/null @@ -1,482 +0,0 @@ -- - In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer. -- - I am going to sell my Mobile products to the customer with name Cleartrail -- - I create View Account Type. -- - !record {model: account.account.type, id: account_account_type_view0}: - close_method: none - code: View - name: View - sign: 1 -- - I create Income Account Type. -- - !record {model: account.account.type, id: account_account_type_income0}: - close_method: unreconciled - code: Income - name: Income - sign: 1 -- - I create Expense Account Type. -- - !record {model: account.account.type, id: account_account_type_expense0}: - close_method: unreconciled - code: Expense - name: Expense - sign: 1 -- - I create Cash Account Type. -- - !record {model: account.account.type, id: account_account_type_cash0}: - close_method: balance - code: Cash - name: Cash - sign: 1 -- - I create Minimal Chart Account. -- - !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 -- - I create Payable Account. -- - !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 -- - I create Receivable Account. -- - !record {model: account.account, id: account_account_receivable0}: - code: AR - 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 -- - I create Cash Account. -- - !record {model: account.account, id: account_account_cash0}: - code: C - currency_mode: current - name: Cash - parent_id: account_account_minimalchart0 - parent_left: 6 - parent_right: 7 - type: other - user_type: account_account_type_cash0 -- - I create Purchases Account. -- - !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 -- - I create Sales Account. -- - !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 -- - I create Purchase Journal. -- - !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 -- - I create Sale Journal. -- - !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 -- - I create Bank Journal. -- - !record {model: account.journal, id: account_journal_bankjournal0}: - code: BNK - 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 -- - I create ir.property for account payable. -- - !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 -- - I create ir.property for account receivable. -- - !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 -- - I create Partner category Customers. -- - !record {model: res.partner.category, id: res_partner_category_customers0}: - name: Customers -- - I create Cleartrail Customer. -- - !record {model: res.partner, id: res_partner_cleartrail0}: - category_id: - - res_partner_category_customers0 - name: Cleartrail -- - I create contact address for Cleartrail. -- - !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 -- - I create invoice address for Cleartrail. -- - !record {model: res.partner.address, id: res_partner_address_2}: - partner_id: res_partner_cleartrail0 - street: sarda house 24 B palasia, A B Road - type: invoice -- - I create delivery address for Cleartrail. -- - !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 requirement regarding the stockable products. -- - I define product category Mobile Products Sellable. -- - !record {model: product.category, id: product_category_allproductssellable0}: - name: Mobile Products Sellable - - -- - I define product category Mobile Services. -- - !record {model: product.category, id: product_category_services0}: - name: Mobile Services -- - I define LG Viewty Smart product template. -- - !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 -- - I define LG Viewty Smart product. -- - !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' - seller_ids: - - delay: 1 - name: base.res_partner_agrolait - qty: 5.0 - standard_price: 160.0 - supply_method: produce - type: product - uom_id: product.product_uom_unit - uom_po_id: product.product_uom_unit - -- - I create a Sale Order for LG Viewty Smart for qty 500 having Shipping Policy is 'Payment Before Delivery' -- - !record {model: sale.order, id: sale_order_so1}: - date_order: '2010-05-03' - invoice_quantity: order - name: Test_SO001 - 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 -- - I confirm the sale order. -- - !workflow {model: sale.order, action: order_confirm, ref: sale_order_so1} -- - I 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_so1")) - assert so.invoice_ids, "Invoices has not been generated for sale_order_so1" -- - I open the Invoice for the SO. -- - !python {model: account.invoice}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - 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 entry. -- - !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: - amount: 85000.0 - date: '2010-05-10' - journal_id: sale.account_journal_bankjournal0 - name: tst - period_id: account.period_5 -- - I pay the invoice. -- - !python {model: account.invoice.pay}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"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 an account invoice pay writeoff entry. -- - !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 -- - Pay and Reconcile the Invoice. -- - !python {model: account.invoice.pay.writeoff}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - 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 check that Paid has been set to true. -- - !python {model: sale.order}: | - sale_id=self.browse(cr, uid, ref("sale_order_so1")) - assert(sale_id.invoiced == True), "Paid has not been set to true" -- - I verify the picking associated with the sale order sale_order_so1 -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so1")) - assert so.picking_ids,"Picking has not been generated" -- - Products are delivered to the Cleartrail Customer. -- - !python {model: stock.picking }: | - import time - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - 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, - } - self.do_partial(cr, uid, [pick.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_so1")) - 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." -- - I verify that a procurement has been generated for so -- - !python {model: procurement.order}: | - from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - assert proc_ids, _('No Procurements!') -- - Then I click on the "Run Procurement" button -- - !python {model: procurement.order}: | - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - import netsvc - wf_service = netsvc.LocalService("workflow") - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - for proc in proc_ids: - wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) -- - I verify that a procurement state is "running" -- - !python {model: procurement.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) - mod_brw = modules.browse(cr,uid,mod_mrp)[0] - assert (mod_brw.state == 'installed'),"mrp module is not installed" - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) - assert proc_ids, _('Procurement is not in the running state!') -- - I verify that a manufacturing order has been generated -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) - mod_brw = modules.browse(cr,uid,mod_mrp)[0] - assert (mod_brw.state == 'installed'),"mrp module is not installed" - mrp_obj = self.pool.get('mrp.production') - so = self.browse(cr, uid, ref("sale_order_so1")) - mnf_ids = mrp_obj.search(cr, uid, [('origin','=',so.name)]) - assert mnf_ids, _('Manufacturing order has not been generated') -- - Manufacturing order has been generated -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) - mod_brw = modules.browse(cr,uid,mod_mrp)[0] - assert (mod_brw.state == 'installed'),"mrp module is not installed" - mrp_obj = self.pool.get('mrp.production') - so = self.browse(cr, uid, ref("sale_order_so1")) - import netsvc - wf_service = netsvc.LocalService("workflow") - mnf_ids = mrp_obj.search(cr, uid, [('origin','=',so.name)]) - for mnf in mnf_ids: - wf_service.trg_validate(uid, 'mrp.production',mnf,'button_produce', cr) -- - Then I click on the "Confirm" button -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) - mod_brw = modules.browse(cr,uid,mod_mrp)[0] - assert (mod_brw.state == 'installed'),"mrp module is not installed" - mrp_obj = self.pool.get('mrp.production') - so = self.browse(cr, uid, ref("sale_order_so1")) - import netsvc - wf_service = netsvc.LocalService("workflow") - mnf_ids = mrp_obj.search(cr, uid, [('origin','=',so.name)]) - for mnf in mnf_ids: - wf_service.trg_validate(uid, 'mrp.production',mnf,'button_produce_done', cr) -- - I verify that the manufacturing state is "done" -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_mrp = modules.search(cr, uid, [('name','=','mrp')]) - mod_brw = modules.browse(cr,uid,mod_mrp)[0] - assert (mod_brw.state == 'installed'),"mrp module is not installed" - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so1")) - mnf_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','done')]) - assert mnf_ids, _('manufacturing is not done!') -- - I verify that a "Picked" has been set to true -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so1")) - assert (so.shipped == True), "Picking is not done." -- - I verify that a sale order is in done state -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so1")) - assert (so.state == 'done'), "Sale order is not in the done state." diff --git a/addons/sale/test/shipping_manual_sale_order.yml b/addons/sale/test/shipping_manual_sale_order.yml deleted file mode 100644 index 045483cd0b6..00000000000 --- a/addons/sale/test/shipping_manual_sale_order.yml +++ /dev/null @@ -1,573 +0,0 @@ -- - In order to test the sale module, I need to configure details regarding product & customer. -- - I am going to sell my Mobile products to the customer with name Cleartrail -- - I create View Account Type. -- - !record {model: account.account.type, id: account_account_type_view0}: - close_method: none - code: View - name: View - sign: 1 -- - I create Income Account Type. -- - !record {model: account.account.type, id: account_account_type_income0}: - close_method: unreconciled - code: Income - name: Income - sign: 1 -- - I create Expense Account Type. -- - !record {model: account.account.type, id: account_account_type_expense0}: - close_method: unreconciled - code: Expense - name: Expense - sign: 1 -- - I create Cash Account Type. -- - !record {model: account.account.type, id: account_account_type_cash0}: - close_method: balance - code: Cash - name: Cash - sign: 1 -- - I create Minimal Chart Account. -- - !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 -- - I create Payable Account. -- - !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 -- - I create Receivable Account. -- - !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 -- - I create Cash Account. -- - !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 -- - I create Purchases Account. -- - !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 -- - I create Sales Account. -- - !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 -- - I create Purchase Journal. -- - !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 -- - I create Sale Journal. -- - !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 -- - I create Bank Journal. -- - !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 -- - I create ir.property for account payable. -- - !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 -- - I create ir.property for account receivable. -- - !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 -- - I create Partner category Customers. -- - !record {model: res.partner.category, id: res_partner_category_customers0}: - name: Customers -- - I create Cleartrail Customer. -- - !record {model: res.partner, id: res_partner_cleartrail0}: - category_id: - - res_partner_category_customers0 - name: Cleartrail -- - I create contact address for Cleartrail. -- - !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 -- - I create invoice address for Cleartrail. -- - !record {model: res.partner.address, id: res_partner_address_2}: - partner_id: res_partner_cleartrail0 - street: sarda house 24 B palasia, A B Road - type: invoice -- - I create delivery address for Cleartrail. -- - !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 requirement regarding the stockable products. -- - I define product category Mobile Products Sellable. -- - !record {model: product.category, id: product_category_allproductssellable0}: - name: Mobile Products Sellable -- - I define product category Mobile Services. -- - !record {model: product.category, id: product_category_services0}: - name: Mobile Services -- - I define New Chocolate Slider Mobile template. -- - !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 -- - I define New Chocolate Slider Mobile. -- - !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' - seller_ids: - - delay: 1 - name: base.res_partner_agrolait - qty: 5.0 - standard_price: 189.0 - supply_method: buy - type: product - uom_id: product.product_uom_unit - uom_po_id: product.product_uom_unit -- - I create a Sale Order for New Chocolate Slider Mobile for qty 500 having Shipping Policy is 'Shipping & Manual Invoice' -- - !record {model: sale.order, id: sale_order_so0}: - date_order: '2010-05-12' - invoice_quantity: order - name: Test_SO002 - 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 -- - I confirm the Sale Order. -- - !workflow {model: sale.order, action: order_confirm, ref: sale_order_so0} -- - I click on Create Invoice button to create the invoice. -- - !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" -- - I open the Invoice for the SO. -- - !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 entry. -- - !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 -- - I pay the invoice. -- - !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 an account invoice pay writeoff entry. -- - !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 -- - Pay and Reconcile the Invoice. -- - !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 verify that Paid has been set to true. -- - !python {model: sale.order}: | - sale_id=self.browse(cr, uid, ref("sale_order_so0")) - assert(sale_id.invoiced == True), "Paid has not been set to true" -- - I verify that the picking has been generated for the sale order -- - !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" -- - I verify that delivery order has been generated for sale order -- - !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','=','delivery')]) - assert (picking_id),"Delivery order has not been generated" -- - I verify that a procurement has been generated for so -- - !python {model: procurement.order}: | - from tools.translate import _ - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - assert proc_ids, _('No Procurements!') -- - Then I click on the "Run Procurement" button -- - !python {model: procurement.order}: | - 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") - proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - for proc in proc_ids: - wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) -- - I verify that a procurement state is "running" -- - !python {model: procurement.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - sale_order_obj = self.pool.get('sale.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) - proc_ids = self.search(cr, uid, [('origin','=',so.name) and ('state','=','running')]) - assert proc_ids, _('Procurement is not in the running state!') -- - I verify that a purchase order has been generated -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - so = self.browse(cr, uid, ref("sale_order_so0")) - pur_obj=self.pool.get('purchase.order') - pur_id=pur_obj.search(cr, uid, [('origin','=',so.name)]) - assert pur_id, _('Purchase order has not been generated') -- - I click on the "Confirm" button to confirm the purchase order -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - pur_obj=self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so0")) - import netsvc - wf_service = netsvc.LocalService("workflow") - pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) - for pur in pur_ids: - wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_confirm', cr) -- - I click on the "Approved by supplier" button to approve the purchase order -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so0")) - import netsvc - wf_service = netsvc.LocalService("workflow") - pur_ids = pur_obj.search(cr, uid, [('origin','=',so.name)]) - for pur in pur_ids: - wf_service.trg_validate(uid, 'purchase.order',pur,'purchase_approve', cr) -- - I verify that a picking related to purchase order has been generated. -- - !python {model: sale.order}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so0")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - assert(po.picking_ids),"Picking for purchase order has not been generated" -- - Then I click on the "Products Received" button of Incoming Shipments -- - !record {model: stock.partial.picking, id: stock_partial_picking_0}: - date: '2010-07-13 17:52:09' -- - I click on the "Validate" button -- - !python {model: stock.picking}: | - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - sale_order_obj = self.pool.get('sale.order') - pur_obj = self.pool.get('purchase.order') - so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - pick_ser_id = self.search(cr, uid, [('purchase_id', '=', po.id )]) - import netsvc - wf_service = netsvc.LocalService("workflow") - for pick in pick_ser_id: - wf_service.trg_validate(uid, 'stock.picking',pick,'button_done', cr) -- - I verify that picking for purchase order has been done. -- - !python {model: sale.order}: | - from tools.translate import _ - modules = self.pool.get('ir.module.module') - mod_pur = modules.search(cr, uid, [('name','=','purchase')]) - mod_brw = modules.browse(cr,uid,mod_pur)[0] - assert (mod_brw.state == 'installed'),"Purchase module is not installed" - pur_obj = self.pool.get('purchase.order') - so = self.browse(cr, uid, ref("sale_order_so0")) - pur_id = pur_obj.search(cr, uid, [('origin','=',so.name)]) - po = pur_obj.browse(cr, uid, pur_id)[0] - picking_obj = self.pool.get('stock.picking') - ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ) and ('state', '=', 'done')]) - assert ids, _('Picking is not in the done state!') -- - Then I done the picking -- - !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, - } - self.do_partial(cr, uid, [pick.id],partial_datas) -- - I verify that picking for sale 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." -- - Then I done the delivery order -- - !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','=','delivery')]) - 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, [pick.id],partial_datas) -- - I verify that delivery state is done -- - !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','=','delivery')]) - if picking_id: - pick = self.browse(cr,uid,picking_id[0]) - assert (pick.state) =='done', "Picking for SO is not in done state." -- - I verify that a "Picked" has been set to true -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so0")) - assert (so.shipped == True), "Picked has not been set to True" -- - I verify that a sale order is in done state -- - !python {model: sale.order}: | - so = self.browse(cr, uid, ref("sale_order_so0")) - assert (so.state == 'done'), "Sale order is not in the done state." diff --git a/addons/sale/test/so_make_line_invoice.yml b/addons/sale/test/so_make_line_invoice.yml index c09e4bf2c11..df919bd234d 100644 --- a/addons/sale/test/so_make_line_invoice.yml +++ b/addons/sale/test/so_make_line_invoice.yml @@ -1,307 +1,29 @@ - - In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer. -- - I am going to sell my Mobile products to the customer with name Cleartrail -- - I create View Account Type. -- - !record {model: account.account.type, id: account_account_type_view0}: - close_method: none - code: View - name: View - sign: 1 -- - I create Income Account Type. -- - !record {model: account.account.type, id: account_account_type_income0}: - close_method: unreconciled - code: Income - name: Income - sign: 1 -- - I create Expense Account Type. -- - !record {model: account.account.type, id: account_account_type_expense0}: - close_method: unreconciled - code: Expense - name: Expense - sign: 1 -- - I create Cash Account Type. -- - !record {model: account.account.type, id: account_account_type_cash0}: - close_method: balance - code: Cash - name: Cash - sign: 1 -- - I create Minimal Chart Account. -- - !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 -- - I create Payable Account. -- - !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 -- - I create Receivable Account. -- - !record {model: account.account, id: account_account_receivable0}: - code: AR - 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 -- - I create Cash Account. -- - !record {model: account.account, id: account_account_cash0}: - code: C - currency_mode: current - name: Cash - parent_id: account_account_minimalchart0 - parent_left: 6 - parent_right: 7 - type: other - user_type: account_account_type_cash0 -- - I create Purchases Account. -- - !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 -- - I create Sales Account. -- - !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 -- - I create Purchase Journal. -- - !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 -- - I create Sale Journal. -- - !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 -- - I create Bank Journal. -- - !record {model: account.journal, id: account_journal_bankjournal0}: - code: BNK - 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 -- - I create ir.property for account payable. -- - !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 -- - I create ir.property for account receivable. -- - !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 -- - I create Partner category Customers. -- - !record {model: res.partner.category, id: res_partner_category_customers0}: - name: Customers -- - I create Cleartrail Customer. -- - !record {model: res.partner, id: res_partner_cleartrail0}: - category_id: - - res_partner_category_customers0 - name: Cleartrail -- - I create contact address for Cleartrail. -- - !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 -- - I create invoice address for Cleartrail. -- - !record {model: res.partner.address, id: res_partner_address_2}: - partner_id: res_partner_cleartrail0 - street: sarda house 24 B palasia, A B Road - type: invoice -- - I create delivery address for Cleartrail. -- - !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 requirement regarding the stockable products. -- - I define product category Mobile Products Sellable. -- - !record {model: product.category, id: product_category_allproductssellable0}: - name: Mobile Products Sellable -- - I define product category Mobile Services. -- - !record {model: product.category, id: product_category_services0}: - name: Mobile Services -- - I define LG Viewty Smart product template. -- - !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 -- - I define LG Viewty Smart product. -- - !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 -- - I define New Chocolate Slider Mobile template. -- - !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 -- - I define New Chocolate Slider Mobile. -- - !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 -- - I create a Sale Order for LG Viewty Smart for qty 500 having order_policy manual. + In order to test the invoices based on sale order lines of sales module in OpenERP + I create a Sale Order for two products LG Viewty Smart and Slider mobile for qty 100 having order_policy manual. - !record {model: sale.order, id: sale_order_so3}: - date_order: '2010-05-12' + date_order: '2010-07-12' invoice_quantity: order name: Test_SO003 order_line: - - name: New Chocolate Slider Mobile + - name: Slider Mobile price_unit: 200.0 product_uom: product.product_uom_unit - product_uom_qty: 500.0 + product_uom_qty: 100.0 state: draft delay: 7.0 - product_id: sale.product_product_newchocolateslidermobile0 - product_uos_qty: 500.0 + product_id: sale.product_product_slidermobile0 + product_uos_qty: 100.0 type: make_to_order - name: LG Viewty Smart price_unit: 170.0 product_uom: product.product_uom_unit - product_uom_qty: 500.0 + product_uom_qty: 100.0 state: draft delay: 7.0 product_id: sale.product_product_lgviewtysmart0 - product_uos_qty: 500.0 + product_uos_qty: 100.0 th_weight: 0.0 type: make_to_order order_policy: manual @@ -317,23 +39,194 @@ - !workflow {model: sale.order, action: order_confirm, ref: sale_order_so3} - - I create an invoice on sale order line. + I click on the "Create Invoice" button of sale order line - - !record {model: sale.order.line.make.invoice, id: sale_order_line_make_invoice_0}: - {} -- - invoice is created for specific sale order line. -- - !python {model: sale.order.line.make.invoice}: | + !python {model: sale.order.line}: | sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) - sol = so.order_line[0] - self.make_invoices(cr, uid, [ref("sale_order_line_make_invoice_0")], {"lang": - 'en_US', "active_model": "sale.order.line", "active_ids": [ref(sol.id)], "tz": - False, "active_id": ref(sol.id), }) + sol = so.order_line[0] + self.create_sale_order_line_invoice(cr, uid, [sol.id], {"lang": "en_US", + "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("sale.menu_invoicing_sales_order_lines")], + "search_default_uninvoiced": 1, "active_id": ref("sale.menu_invoicing_sales_order_lines"), + }) - - I verify that invoice regarding sale order line has been created. + I verify that "Invoiced" has been set to True. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so3")) + sol = sale_id.order_line[0] + assert(sol.invoiced == True), "Invoiced has not been set to true" +- + I verify that an invoice for sale order line has been created. - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_so3")) - assert so.invoice_ids, "Invoices has not been generated for sale_order_so0" + assert so.invoice_ids, "Invoices has not been generated for sale_order_so3" +- + I click on the Create button of invoice +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + 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) +- + I verify that an invoice state has transit from draft to open state +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','open')]) + assert invoice_id, "Invoice is not in the open state" +- + Creating an account invoice pay entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst0}: + amount: 20000.0 + date: '2010-07-19' + journal_id: sale.account_journal_bankjournal0 + name: test + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst0")], {"lang": "en_US", "active_model": "account.invoice", + "tz":False,"record_id": so.invoice_ids[0].id, "active_ids": [so.invoice_ids[0].id], "type": + "out_invoice", "active_id": so.invoice_ids[0].id}) +- + Creating an account invoice pay writeoff entry. +- + !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 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + 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 that an invoice is in done state. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','paid')]) + assert invoice_id, "Invoice for SO is not in done state." +- + I verify that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so3")) + assert(sale_id.invoiced == True), "Paid has not been set to true" +- + I create an invoice for another sale order line. +- + I click on the "Create Invoice" button of sale order line +- + !python {model: sale.order.line}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + sol = so.order_line[1] + self.create_sale_order_line_invoice(cr, uid, [sol.id], {"lang": "en_US", + "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("sale.menu_invoicing_sales_order_lines")], + "search_default_uninvoiced": 1, "active_id": ref("sale.menu_invoicing_sales_order_lines"), + }) +- + I verify that invoice for sale order line has been created. +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so3")) + assert so.invoice_ids[1], "Invoices has not been generated for sale_order_so3" +- + I verify that "Invoiced" has been set to True. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so3")) + sol = sale_id.order_line[1] + assert(sol.invoiced == True), "Invoiced has not been set to true" +- + I verify that "Paid" has been set to False. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so3")) + assert(sale_id.invoiced == False), "Paid has not been set to true" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + 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) +- + I verify that an invoice state has transit from draft to open state +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','open')]) + assert invoice_id, "Invoice is not in the open state" +- + Creating a account invoice pay entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: + amount: 17000.0 + date: '2010-07-19' + journal_id: sale.account_journal_bankjournal0 + name: test + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"lang": "en_US", "active_model": "account.invoice", + "tz":False,"record_id": so.invoice_ids[1].id, "active_ids": [so.invoice_ids[1].id], "type": + "out_invoice", "active_id": so.invoice_ids[1].id}) +- + Creating an account invoice pay writeoff entry. +- + !record {model: account.invoice.pay.writeoff, id: account_invoice_pay_writeoff_1}: + analytic_id: account.analytic_customers + comment: Write-Off + writeoff_acc_id: account.a_sale + writeoff_journal_id: sale.account_journal_bankjournal0 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + self.pay_and_reconcile_writeoff(cr, uid, [ref("account_invoice_pay_writeoff_1")], + {"lang": 'en_US', "tz": False, "active_model": 'account.invoice', "active_ids": + [so.invoice_ids[1].id], "type": "out_invoice", "active_id": so.invoice_ids[1].id}) +- + I verify the invoice is in done state. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so3")) + invoice_id = self.search(cr, uid, [('origin','=',so.name) and ('state','=','paid')]) + assert invoice_id, "Invoice for SO is not in done state." +- + I verify that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so3")) + assert(sale_id.invoiced == True), "Paid has not been set to true" \ No newline at end of file From 77420fc8cf879f9b9cd4893c5226476175c927d5 Mon Sep 17 00:00:00 2001 From: mtr Date: Fri, 23 Jul 2010 18:36:01 +0530 Subject: [PATCH 5/7] [IMP] sale:-improved the so_make_line_invoice.yml file,verified it gives warning on the Create Invoice button click bzr revid: mtr@mtr-20100723130601-i46qburstr5c2cbc --- addons/sale/test/so_make_line_invoice.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/addons/sale/test/so_make_line_invoice.yml b/addons/sale/test/so_make_line_invoice.yml index df919bd234d..e373a2af18d 100644 --- a/addons/sale/test/so_make_line_invoice.yml +++ b/addons/sale/test/so_make_line_invoice.yml @@ -130,7 +130,18 @@ !python {model: sale.order}: | sale_id=self.browse(cr, uid, ref("sale_order_so3")) assert(sale_id.invoiced == True), "Paid has not been set to true" -- +- + I click on the "Create Invoice" button of sale order and verify that it gives a warning message +- + !python {model: sale.order}: | + sale_order_obj = self.pool.get('sale.order') + import netsvc + wf_service = netsvc.LocalService("workflow") + try: + wf_service.trg_validate(uid, 'sale.order',ref("sale_order_so3"),'manual_invoice', cr) + except: + pass +- I create an invoice for another sale order line. - I click on the "Create Invoice" button of sale order line From f86fe1e39388dce00854bc36cbfe5d9bdc69fe61 Mon Sep 17 00:00:00 2001 From: mtr Date: Wed, 28 Jul 2010 13:44:09 +0530 Subject: [PATCH 6/7] [IMP] sale:-improved the yaml files bzr revid: mtr@mtr-20100728081409-itta0jzp5m8y3jlh --- addons/sale/test/advance_invoice.yml | 2 +- addons/sale/test/data_test.yml | 2 ++ addons/sale/test/manual_order_policy.yml | 4 ++-- addons/sale/test/prepaid_order_policy.yml | 6 +++--- addons/sale/test/so_make_line_invoice.yml | 4 ++-- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/addons/sale/test/advance_invoice.yml b/addons/sale/test/advance_invoice.yml index 871dac6abb9..5a8d06c354c 100644 --- a/addons/sale/test/advance_invoice.yml +++ b/addons/sale/test/advance_invoice.yml @@ -142,7 +142,7 @@ - !record {model: account.invoice.pay, id: account_invoice_pay_tst2}: amount: 14000.0 - date: '2010-07-22' + date: '2010-07-17' journal_id: sale.account_journal_bankjournal0 name: test period_id: account.period_5 diff --git a/addons/sale/test/data_test.yml b/addons/sale/test/data_test.yml index 74b4c9ed7a6..ef3b0bfe0ed 100644 --- a/addons/sale/test/data_test.yml +++ b/addons/sale/test/data_test.yml @@ -243,6 +243,7 @@ seller_ids: - delay: 1 name: base.res_partner_agrolait + min_qty: 2.0 qty: 5.0 standard_price: 160.0 supply_method: produce @@ -282,6 +283,7 @@ seller_ids: - delay: 1 name: base.res_partner_agrolait + min_qty: 2.0 qty: 5.0 standard_price: 189.0 supply_method: buy diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml index 73584a54040..3d7abdcf549 100644 --- a/addons/sale/test/manual_order_policy.yml +++ b/addons/sale/test/manual_order_policy.yml @@ -72,7 +72,7 @@ - !record {model: account.invoice.pay, id: account_invoice_pay_tst0}: amount: 100000.0 - date: '2010-05-10' + date: '2010-07-17' journal_id: sale.account_journal_bankjournal0 name: test period_id: account.period_5 @@ -226,7 +226,7 @@ Then I click on the "Products Received" button of Incoming Shipments - !record {model: stock.partial.picking, id: stock_partial_picking_0}: - date: '2010-07-13 17:52:09' + date: '2010-07-17 17:52:09' - I click on the "Validate" button - diff --git a/addons/sale/test/prepaid_order_policy.yml b/addons/sale/test/prepaid_order_policy.yml index 97e435ef5c9..fd7f04bede0 100644 --- a/addons/sale/test/prepaid_order_policy.yml +++ b/addons/sale/test/prepaid_order_policy.yml @@ -2,7 +2,7 @@ I create a Sale Order for LG Viewty Smart for qty 500 having Shipping Policy is 'Payment Before Delivery' - !record {model: sale.order, id: sale_order_so1}: - date_order: '2010-05-03' + date_order: '2010-07-20' invoice_quantity: order name: Test_SO001 order_line: @@ -58,7 +58,7 @@ - !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: amount: 85000.0 - date: '2010-05-10' + date: '2010-07-20' journal_id: sale.account_journal_bankjournal0 name: tst period_id: account.period_5 @@ -235,7 +235,7 @@ Then I click on the "Products Received" button of Incoming Shipments - !record {model: stock.partial.picking, id: stock_partial_picking_0}: - date: '2010-07-13 17:52:09' + date: '2010-07-20 17:52:09' - I click on the "Validate" button - diff --git a/addons/sale/test/so_make_line_invoice.yml b/addons/sale/test/so_make_line_invoice.yml index e373a2af18d..9725a169b2c 100644 --- a/addons/sale/test/so_make_line_invoice.yml +++ b/addons/sale/test/so_make_line_invoice.yml @@ -86,7 +86,7 @@ - !record {model: account.invoice.pay, id: account_invoice_pay_tst0}: amount: 20000.0 - date: '2010-07-19' + date: '2010-07-12' journal_id: sale.account_journal_bankjournal0 name: test period_id: account.period_5 @@ -197,7 +197,7 @@ - !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: amount: 17000.0 - date: '2010-07-19' + date: '2010-07-12' journal_id: sale.account_journal_bankjournal0 name: test period_id: account.period_5 From 20099f3fd19db14901b60c48cf9cdc046423aa50 Mon Sep 17 00:00:00 2001 From: mtr Date: Wed, 28 Jul 2010 13:51:02 +0530 Subject: [PATCH 7/7] [ADD] sale:-added two new yamls for invoice based on shipped qty and ordered qty bzr revid: mtr@mtr-20100728082102-mqcos80ueufpqjwq --- addons/sale/__openerp__.py | 2 + addons/sale/test/invoice_on_ordered_qty.yml | 151 +++++++++++++++++++ addons/sale/test/invoice_on_shipped_qty.yml | 154 ++++++++++++++++++++ 3 files changed, 307 insertions(+) create mode 100644 addons/sale/test/invoice_on_ordered_qty.yml create mode 100644 addons/sale/test/invoice_on_shipped_qty.yml diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index dc74ca9f24e..a2cbd894096 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -78,6 +78,8 @@ 'test/so_make_line_invoice.yml', 'test/so_make_invoice.yml', 'test/sale_procurement.yml', + 'test/invoice_on_ordered_qty.yml', + 'test/invoice_on_shipped_qty.yml', ], 'installable': True, 'active': False, diff --git a/addons/sale/test/invoice_on_ordered_qty.yml b/addons/sale/test/invoice_on_ordered_qty.yml new file mode 100644 index 00000000000..9056e4cbb83 --- /dev/null +++ b/addons/sale/test/invoice_on_ordered_qty.yml @@ -0,0 +1,151 @@ +- + In order to test the Sale module in OpenERP, + I create a Sale Order for Slider Mobile for 500 quantity having Shipping Policy 'Shipping & Manual Invoice' and Invoice on 'Ordered quantities' + in order to create an invoice based on the ordered quantity +- + !record {model: sale.order, id: sale_order_so8}: + date_order: '2010-07-17' + invoice_quantity: order + name: Test_SO006 + order_line: + - name: Slider Mobile + price_unit: 200 + product_uom: product.product_uom_unit + product_uom_qty: 200.0 + state: draft + delay: 7.0 + product_id: sale.product_product_slidermobile0 + product_uos_qty: 200.0 + type: make_to_order + order_policy: manual + invoice_quantity: order + 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 +- + I confirm the Sale Order. +- + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so8} +- + I verify that the picking has been generated for the sale order +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert so.picking_ids,"Picking has not been generated for sale_order_so8" +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-17 17:52:09' +- + Then I done the picking +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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': '100', + 'product_uom': move.product_uom.id, + } + self.do_partial(cr, uid, [pick.id],partial_datas) +- + I click on Create Invoice button to create the invoice. +- + !workflow {model: sale.order, action: manual_invoice, ref: sale_order_so8} +- + I verify whether the invoice has been generated for SO +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so8")) + assert so.invoice_ids, "Invoices has not been generated for sale_order_so8" +- + I verify that an invoice is created on the basis of ordered quantity +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + for so_lines in so.order_line: + qty=so_lines.product_uom_qty + ids = self.search(cr, uid, [('origin', '=', so.name)]) + inv_brw = self.browse(cr,uid,ids)[0] + for inv_lines in inv_brw.invoice_line: + qty1=inv_lines.quantity + invoice_id = self.search(cr, uid, [('qty1','=', 'qty') and ('origin', '=', so.name)]) + assert invoice_id, "Quantities are not same" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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 entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: + amount: 40000.0 + date: '2010-07-17' + journal_id: sale.account_journal_bankjournal0 + name: tst + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"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 an account invoice pay writeoff entry. +- + !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 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so8")) + 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_so8")) + invoice_ids = so.invoice_ids + for invoice in invoice_ids: + assert (invoice.state) =='paid', "Invoice for SO is not in done state." +- + I check that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so8")) + assert(sale_id.invoiced == True), "Paid has not been set to true" \ No newline at end of file diff --git a/addons/sale/test/invoice_on_shipped_qty.yml b/addons/sale/test/invoice_on_shipped_qty.yml new file mode 100644 index 00000000000..5a608aff9b8 --- /dev/null +++ b/addons/sale/test/invoice_on_shipped_qty.yml @@ -0,0 +1,154 @@ +- + In order to test the Sale module in OpenERP, + I create a Sale Order for Slider Mobile for 500 quantity having Shipping Policy 'Shipping & Manual Invoice' and Invoice on 'Shipped quantities' + in order to create an invoice based on the shipping quantity +- + !record {model: sale.order, id: sale_order_so6}: + date_order: '2010-07-17' + invoice_quantity: order + name: Test_SO006 + order_line: + - name: Slider Mobile + price_unit: 200 + product_uom: product.product_uom_unit + product_uom_qty: 200.0 + state: draft + delay: 7.0 + product_id: sale.product_product_slidermobile0 + product_uos_qty: 200.0 + type: make_to_order + order_policy: manual + invoice_quantity: procurement + 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 +- + I confirm the Sale Order. +- + !workflow {model: sale.order, action: order_confirm, ref: sale_order_so6} +- + I verify that the picking has been generated for the sale order +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so6")) + assert so.picking_ids,"Picking has not been generated for sale_order_so6" +- + Then I click on the "Products Received" button of Incoming Shipments +- + !record {model: stock.partial.picking, id: stock_partial_picking_0}: + date: '2010-07-17 17:52:09' +- + Then I done the picking +- + !python {model: stock.picking }: | + import time + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so6")) + 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': '100', + 'product_uom': move.product_uom.id, + } + self.do_partial(cr, uid, [pick.id],partial_datas) +- + I click on Create Invoice button to create the invoice. +- + !workflow {model: sale.order, action: manual_invoice, ref: sale_order_so6} +- + I verify whether the invoice has been generated for SO +- + !python {model: sale.order}: | + so = self.browse(cr, uid, ref("sale_order_so6")) + assert so.invoice_ids, "Invoices has not been generated for sale_order_so6" +- + I verify that an invoice is created on the basis of shipped quantity +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so6")) + picking_obj = self.pool.get('stock.picking') + ids = picking_obj.search(cr, uid, [('origin', '=', so.name)]) + pick_brw = picking_obj.browse(cr,uid, ids)[0] + for lines in pick_brw.move_lines: + qty=lines.product_qty + inv_id = self.search(cr, uid, [('origin', '=', so.name)]) + inv_brw = self.browse(cr,uid,inv_id)[0] + for inv_lines in inv_brw.invoice_line: + qty1=inv_lines.quantity + invoice_id = self.search(cr, uid, [('qty1','=', 'qty') and ('origin', '=', so.name)]) + assert invoice_id, "Quantities are not same" +- + I open the Invoice for the SO. +- + !python {model: account.invoice}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so6")) + 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 entry. +- + !record {model: account.invoice.pay, id: account_invoice_pay_tst1}: + amount: 20000.0 + date: '2010-07-17' + journal_id: sale.account_journal_bankjournal0 + name: tst + period_id: account.period_5 +- + I pay the invoice. +- + !python {model: account.invoice.pay}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so6")) + self.wo_check(cr, uid, [ref("account_invoice_pay_tst1")], {"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 an account invoice pay writeoff entry. +- + !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 +- + Pay and Reconcile the Invoice. +- + !python {model: account.invoice.pay.writeoff}: | + sale_order_obj = self.pool.get('sale.order') + so = sale_order_obj.browse(cr, uid, ref("sale_order_so6")) + 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_so6")) + invoice_ids = so.invoice_ids + for invoice in invoice_ids: + assert (invoice.state) =='paid', "Invoice for SO is not in done state." +- + I check that Paid has been set to true. +- + !python {model: sale.order}: | + sale_id=self.browse(cr, uid, ref("sale_order_so6")) + assert(sale_id.invoiced == True), "Paid has not been set to true"