def test_mo_analytic_backorder(self): """Test the analytic lines are correctly posted when backorder. """ # create a mo mo_form = Form(self.env['mrp.production']) mo_form.product_id = self.product mo_form.bom_id = self.bom mo_form.product_qty = 10.0 mo_form.analytic_account_id = self.analytic_account mo = mo_form.save() mo.action_confirm() self.assertEqual(mo.state, 'confirmed') self.assertEqual(len(mo.move_raw_ids.analytic_account_line_id), 0) # increase qty_producing to 5.0 mo_form = Form(mo) mo_form.qty_producing = 5.0 mo_form.save() self.assertEqual(mo.state, 'progress') self.assertEqual(mo.move_raw_ids.analytic_account_line_id.amount, -50.0) backorder_wizard_dict = mo.button_mark_done() Form(self.env[(backorder_wizard_dict.get('res_model'))].with_context(backorder_wizard_dict['context'])).save().action_backorder() self.assertEqual(mo.state, 'done') self.assertEqual(mo.move_raw_ids.analytic_account_line_id.amount, -50.0)
def test_mo_analytic(self): """Test the amount on analytic line will change when consumed qty of the component changed. """ # create a mo mo_form = Form(self.env['mrp.production']) mo_form.product_id = self.product mo_form.bom_id = self.bom mo_form.product_qty = 10.0 mo_form.analytic_account_id = self.analytic_account mo = mo_form.save() mo.action_confirm() self.assertEqual(mo.state, 'confirmed') self.assertEqual(len(mo.move_raw_ids.analytic_account_line_id), 0) # increase qty_producing to 5.0 mo_form = Form(mo) mo_form.qty_producing = 5.0 mo_form.save() self.assertEqual(mo.state, 'progress') self.assertEqual(mo.move_raw_ids.analytic_account_line_id.amount, -50.0) # increase qty_producing to 10.0 mo_form = Form(mo) mo_form.qty_producing = 10.0 mo_form.save() # Hack to bypass test doing strange things mo._set_qty_producing() mo.workorder_ids.button_finish() self.assertEqual(mo.state, 'to_close') self.assertEqual(mo.move_raw_ids.analytic_account_line_id.amount, -100.0) # mark as done mo.button_mark_done() self.assertEqual(mo.state, 'done') self.assertEqual(mo.move_raw_ids.analytic_account_line_id.amount, -100.0)
def test_invoice_analytic_account_so_not_default(self): """ Tests whether, when an analytic account rule is set and the so has an analytic account, the default analytic acount doesn't replace the one from the so in the invoice. """ analytic_account_default = self.env['account.analytic.account'].create({'name': 'default'}) analytic_account_so = self.env['account.analytic.account'].create({'name': 'so'}) self.env['account.analytic.default'].create({ 'analytic_id': analytic_account_default.id, 'product_id': self.product_a.id, }) so_form = Form(self.env['sale.order']) so_form.partner_id = self.partner_a so_form.analytic_account_id = analytic_account_so with so_form.order_line.new() as sol: sol.product_id = self.product_a sol.product_uom_qty = 1 so = so_form.save() so.action_confirm() so._force_lines_to_invoice_policy_order() so_context = { 'active_model': 'sale.order', 'active_ids': [so.id], 'active_id': so.id, 'default_journal_id': self.company_data['default_journal_sale'].id, } down_payment = self.env['sale.advance.payment.inv'].with_context(so_context).create({}) down_payment.create_invoices() aml = self.env['account.move.line'].search([('move_id', 'in', so.invoice_ids.ids)])[0] self.assertRecordValues(aml, [{'analytic_account_id': analytic_account_so.id}])
def test_workcenter_different_analytic_account(self): """Test when workcenter and MO are using the same analytic account, no duplicated lines will be post. """ # set wc analytic account to be different from the one on the bom wc_analytic_account = self.env['account.analytic.account'].create({'name': 'wc_analytic_account'}) self.workcenter.costs_hour_account_id = wc_analytic_account # create a mo mo_form = Form(self.env['mrp.production']) mo_form.product_id = self.product mo_form.bom_id = self.bom mo_form.product_qty = 10.0 mo_form.analytic_account_id = self.analytic_account mo = mo_form.save() mo.action_confirm() self.assertEqual(len(mo.workorder_ids.wc_analytic_account_line_id), 0) # change duration to 60 mo_form = Form(mo) with mo_form.workorder_ids.edit(0) as line_edit: line_edit.duration = 60.0 mo_form.save() self.assertEqual(mo.workorder_ids.mo_analytic_account_line_id.amount, -10.0) self.assertEqual(mo.workorder_ids.mo_analytic_account_line_id.account_id, self.analytic_account) self.assertEqual(mo.workorder_ids.wc_analytic_account_line_id.amount, -10.0) self.assertEqual(mo.workorder_ids.wc_analytic_account_line_id.account_id, wc_analytic_account) # change duration to 120 with mo_form.workorder_ids.edit(0) as line_edit: line_edit.duration = 120.0 mo_form.save() self.assertEqual(mo.workorder_ids.mo_analytic_account_line_id.amount, -20.0) self.assertEqual(mo.workorder_ids.mo_analytic_account_line_id.account_id, self.analytic_account) self.assertEqual(mo.workorder_ids.wc_analytic_account_line_id.amount, -20.0) self.assertEqual(mo.workorder_ids.wc_analytic_account_line_id.account_id, wc_analytic_account) # mark as done mo_form.qty_producing = 10.0 mo_form.save() mo.button_mark_done() self.assertEqual(mo.state, 'done') self.assertEqual(mo.workorder_ids.mo_analytic_account_line_id.amount, -20.0) self.assertEqual(mo.workorder_ids.mo_analytic_account_line_id.account_id, self.analytic_account) self.assertEqual(mo.workorder_ids.wc_analytic_account_line_id.amount, -20.0) self.assertEqual(mo.workorder_ids.wc_analytic_account_line_id.account_id, wc_analytic_account)
def test_changing_mo_analytic_account(self): """ Check if the MO account analytic lines are correctly updated after the change of the MO account analytic. """ # create a mo mo_form = Form(self.env['mrp.production']) mo_form.product_id = self.product mo_form.bom_id = self.bom mo_form.product_qty = 1 mo_form.analytic_account_id = self.analytic_account mo = mo_form.save() mo.action_confirm() self.assertEqual(mo.state, 'confirmed') self.assertEqual(len(mo.move_raw_ids.analytic_account_line_id), 0) # Mark as done wizard_dict = mo.button_mark_done() Form(self.env[(wizard_dict.get('res_model'))].with_context( wizard_dict['context'])).save().process() self.assertEqual(mo.state, 'done') self.assertEqual(len(mo.move_raw_ids.analytic_account_line_id), 1) # Create a new analytic account new_analytic_account = self.env['account.analytic.account'].create( {'name': 'test_analytic_account_2'}) # Change the MO analytic account mo.analytic_account_id = new_analytic_account self.assertEqual( mo.move_raw_ids.analytic_account_line_id.account_id.id, new_analytic_account.id) #Get the MO analytic account lines mo_analytic_account_lines = mo.move_raw_ids.analytic_account_line_id mo.analytic_account_id = False # Check that the MO analytic account lines are deleted self.assertEqual(len(mo.move_raw_ids.analytic_account_line_id), 0) self.assertFalse(mo_analytic_account_lines.exists()) # Check that the AA lines are recreated correctly if we delete the AA, save the MO, and assign a new one mo.analytic_account_id = self.analytic_account self.assertEqual(len(mo.move_raw_ids.analytic_account_line_id), 1)