From 34e035b083179a6ba7f086e06fdd7ec96d7364d8 Mon Sep 17 00:00:00 2001 From: mtr Date: Fri, 16 Jul 2010 10:28:08 +0530 Subject: [PATCH 01/21] [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 02/21] [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 03/21] [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 04/21] [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 05/21] [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 06/21] [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 07/21] [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" From 9bd6693f6d7c870d910e27b75f99397815b0ef73 Mon Sep 17 00:00:00 2001 From: "pap (openerp)" Date: Thu, 29 Jul 2010 11:01:04 +0530 Subject: [PATCH 08/21] [IMP]: imp in project, project_log_term - changed type of all the dates in project phase from datetime to date - improved send mail wizard on closing a task based on projects warn_customer, war_manager fields improved yaml and demo data fields set to readonly when project, phases or tasks in done state bzr revid: pap@tinyerp.co.in-20100729053104-vx94tzk051896frz --- addons/project/project.py | 15 ++--- addons/project/project_view.xml | 12 ++-- addons/project/test/test_project.yml | 9 ++- .../project/test/test_project_delegation.yml | 15 +++-- addons/project/wizard/project_close_task.py | 58 +++++++++++++------ .../wizard/project_close_task_view.xml | 4 +- addons/project_issue/project_issue.py | 4 +- addons/project_long_term/project_long_term.py | 46 +++++++-------- .../project_long_term_demo.xml | 46 +++++++-------- .../test/schedule_phase_tasks.yml | 6 +- .../test/schedule_project_phases.yml | 12 ++-- .../test/schedule_project_tasks.yml | 2 +- .../wizard/project_compute_phases.py | 10 ++-- .../wizard/project_schedule_tasks.py | 2 +- 14 files changed, 136 insertions(+), 105 deletions(-) diff --git a/addons/project/project.py b/addons/project/project.py index b05423e00dd..603154d28fe 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -152,17 +152,17 @@ where prp.id in %s''',(tuple(ids),)) 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of Projects."), 'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc."), 'priority': fields.integer('Sequence', help="Gives the sequence order when displaying a list of task"), - 'warn_manager': fields.boolean('Warn Manager', help="If you check this field, the project manager will receive a request each time a task is completed by his team."), - 'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members', help="Project's member. Not used in any computation, just for information purpose."), + 'warn_manager': fields.boolean('Warn Manager', help="If you check this field, the project manager will receive a request each time a task is completed by his team.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), + 'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members', help="Project's member. Not used in any computation, just for information purpose.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), 'tasks': fields.one2many('project.task', 'project_id', "Project tasks"), 'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects."), 'effective_hours': fields.function(_progress_rate, multi="progress", method=True, string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects."), 'total_hours': fields.function(_progress_rate, multi="progress", method=True, string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects."), 'progress_rate': fields.function(_progress_rate, multi="progress", method=True, string='Progress', type='float', help="Percent of tasks closed according to the total of tasks todo."), - 'warn_customer': fields.boolean('Warn Partner', help="If you check this, the user will have a popup when closing a task that propose a message to send by email to the customer."), - 'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed."), - 'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed."), - 'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages'), + 'warn_customer': fields.boolean('Warn Partner', help="If you check this, the user will have a popup when closing a task that propose a message to send by email to the customer.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), + 'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), + 'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), + 'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), } _order = "sequence" @@ -480,7 +480,8 @@ class task(osv.osv): 'ref_doc1': 'project.task,%d'% (task.id,), 'ref_doc2': 'project.project,%d'% (project.id,), }) - elif project.warn_manager and cntx.get('mail_send',True): + elif (project.warn_manager or project.warn_customer) and cntx.get('mail_send',True): + cntx.update({'send_manager': project.warn_manager, 'send_partner': project.warn_customer}) mail_send = True message = _('Task ') + " '" + task.name + "' "+ _("is Done.") self.log(cr, uid, task.id, message) diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 7df69fbbd40..166e64217ac 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -20,9 +20,9 @@ - - - + + + @@ -48,8 +48,8 @@