def _create_basic_config(self): new_config = Form(self.env['pos.config']) new_config.name = 'PoS Shop Test' new_config.module_account = True new_config.invoice_journal_id = self.invoice_journal new_config.journal_id = self.pos_sale_journal new_config.available_pricelist_ids.clear() new_config.available_pricelist_ids.add(self.currency_pricelist) new_config.pricelist_id = self.currency_pricelist config = new_config.save() cash_journal = config.payment_method_ids.filtered( lambda pm: pm.is_cash_count)[:1].cash_journal_id cash_split_pm = self.env['pos.payment.method'].create({ 'name': 'Split (Cash) PM', 'receivable_account_id': self.pos_receivable_account.id, 'split_transactions': True, 'is_cash_count': True, 'cash_journal_id': cash_journal.id, }) config.write({'payment_method_ids': [(4, cash_split_pm.id, 0)]}) return config
def create_payment(self, invoices): payment_register = Form(self.env['account.payment'].with_context(active_model='account.move', active_ids=invoices.ids)) payment_register.payment_date = time.strftime('%Y') + '-07-15' payment_register.journal_id = self.bank_journal payment_register.payment_method_id = self.payment_method_check payment = payment_register.save() payment.post() return payment
def test_partial_payment(self): """ Create test to pay invoices (cust. inv + vendor bill) with partial payment """ # Test Customer Invoice inv_1 = self.create_invoice(amount=600) payment_register = Form(self.env['account.payment'].with_context( active_model='account.move', active_ids=inv_1.ids)) payment_register.payment_date = time.strftime('%Y') + '-07-15' payment_register.journal_id = self.bank_journal_euro payment_register.payment_method_id = self.payment_method_manual_in # Perform the partial payment by setting the amount at 550 instead of 600 payment_register.amount = 550 payment = payment_register.save() self.assertEqual(len(payment), 1) self.assertEqual(payment.invoice_ids[0].id, inv_1.id) self.assertAlmostEquals(payment.amount, 550) self.assertEqual(payment.payment_type, 'inbound') self.assertEqual(payment.partner_id, self.partner_agrolait) self.assertEqual(payment.partner_type, 'customer') # Test Vendor Bill inv_2 = self.create_invoice(amount=500, type='in_invoice', partner=self.partner_china_exp.id) payment_register = Form(self.env['account.payment'].with_context( active_model='account.move', active_ids=inv_2.ids)) payment_register.payment_date = time.strftime('%Y') + '-07-15' payment_register.journal_id = self.bank_journal_euro payment_register.payment_method_id = self.payment_method_manual_in # Perform the partial payment by setting the amount at 300 instead of 500 payment_register.amount = 300 payment = payment_register.save() self.assertEqual(len(payment), 1) self.assertEqual(payment.invoice_ids[0].id, inv_2.id) self.assertAlmostEquals(payment.amount, 300) self.assertEqual(payment.payment_type, 'outbound') self.assertEqual(payment.partner_id, self.partner_china_exp) self.assertEqual(payment.partner_type, 'supplier')
def _init_payment(cls, payment_type, partner_type=None): payment_form = Form(cls.env['account.payment']) payment_form.journal_id = cls.bank_journal payment_form.payment_date = fields.Date.from_string('2019-01-01') payment_form.amount = 100 if payment_type == 'transfer': payment_form.destination_journal_id = cls.cash_journal else: payment_form.partner_type = partner_type payment_form.partner_id = cls.partner_a payment_form.payment_type = payment_type return payment_form.save()
def test_in_refund_line_onchange_currency_1(self): # New journal having a foreign currency set. journal = self.company_data['default_journal_purchase'].copy() journal.currency_id = self.currency_data['currency'] move_form = Form(self.invoice) move_form.journal_id = journal move_form.save() self.assertInvoiceValues( self.invoice, [ { **self.product_line_vals_1, 'currency_id': journal.currency_id.id, 'amount_currency': -800.0, 'credit': 400.0, }, { **self.product_line_vals_2, 'currency_id': journal.currency_id.id, 'amount_currency': -160.0, 'credit': 80.0, }, { **self.tax_line_vals_1, 'currency_id': journal.currency_id.id, 'amount_currency': -144.0, 'credit': 72.0, }, { **self.tax_line_vals_2, 'currency_id': journal.currency_id.id, 'amount_currency': -24.0, 'credit': 12.0, }, { **self.term_line_vals_1, 'currency_id': journal.currency_id.id, 'amount_currency': 1128.0, 'debit': 564.0, }, ], { **self.move_vals, 'currency_id': journal.currency_id.id, 'journal_id': journal.id, }) move_form = Form(self.invoice) # Change the date to get another rate: 1/3 instead of 1/2. move_form.date = fields.Date.from_string('2016-01-01') move_form.save() self.assertInvoiceValues( self.invoice, [ { **self.product_line_vals_1, 'currency_id': journal.currency_id.id, 'amount_currency': -800.0, 'credit': 266.67, }, { **self.product_line_vals_2, 'currency_id': journal.currency_id.id, 'amount_currency': -160.0, 'credit': 53.33, }, { **self.tax_line_vals_1, 'currency_id': journal.currency_id.id, 'amount_currency': -144.0, 'credit': 48.0, }, { **self.tax_line_vals_2, 'currency_id': journal.currency_id.id, 'amount_currency': -24.0, 'credit': 8.0, }, { **self.term_line_vals_1, 'currency_id': journal.currency_id.id, 'amount_currency': 1128.0, 'debit': 376.0, }, ], { **self.move_vals, 'currency_id': journal.currency_id.id, 'journal_id': journal.id, 'date': fields.Date.from_string('2016-01-01'), }) move_form = Form(self.invoice) with move_form.invoice_line_ids.edit(0) as line_form: # 0.045 * 0.1 = 0.0045. As the foreign currency has a 0.001 rounding, # the result should be 0.005 after rounding. line_form.quantity = 0.1 line_form.price_unit = 0.045 move_form.save() self.assertInvoiceValues( self.invoice, [ { **self.product_line_vals_1, 'quantity': 0.1, 'price_unit': 0.05, 'price_subtotal': 0.005, 'price_total': 0.006, 'currency_id': journal.currency_id.id, 'amount_currency': -0.005, 'credit': 0.0, }, { **self.product_line_vals_2, 'currency_id': journal.currency_id.id, 'amount_currency': -160.0, 'credit': 53.33, }, { **self.tax_line_vals_1, 'price_unit': 24.0, 'price_subtotal': 24.001, 'price_total': 24.001, 'currency_id': journal.currency_id.id, 'amount_currency': -24.001, 'credit': 8.0, }, { **self.tax_line_vals_2, 'currency_id': journal.currency_id.id, 'amount_currency': -24.0, 'credit': 8.0, }, { **self.term_line_vals_1, 'currency_id': journal.currency_id.id, 'price_unit': -208.01, 'price_subtotal': -208.006, 'price_total': -208.006, 'amount_currency': 208.006, 'debit': 69.33, }, ], { **self.move_vals, 'currency_id': journal.currency_id.id, 'journal_id': journal.id, 'date': fields.Date.from_string('2016-01-01'), 'amount_untaxed': 160.005, 'amount_tax': 48.001, 'amount_total': 208.006, }) # The journal forces you to provide a secondary currency. with self.assertRaises(UserError), self.cr.savepoint(): move_form = Form(self.invoice) move_form.currency_id = self.company_data['currency'] move_form.save() # Exit the multi-currencies. journal.currency_id = False move_form = Form(self.invoice) move_form.currency_id = self.company_data['currency'] move_form.save() self.assertInvoiceValues( self.invoice, [ { **self.product_line_vals_1, 'quantity': 0.1, 'price_unit': 0.05, 'price_subtotal': 0.01, 'price_total': 0.01, 'credit': 0.01, }, self.product_line_vals_2, { **self.tax_line_vals_1, 'price_unit': 24.0, 'price_subtotal': 24.0, 'price_total': 24.0, 'credit': 24.0, }, self.tax_line_vals_2, { **self.term_line_vals_1, 'price_unit': -208.01, 'price_subtotal': -208.01, 'price_total': -208.01, 'debit': 208.01, }, ], { **self.move_vals, 'currency_id': self.company_data['currency'].id, 'journal_id': journal.id, 'date': fields.Date.from_string('2016-01-01'), 'amount_untaxed': 160.01, 'amount_tax': 48.0, 'amount_total': 208.01, })
def _create_other_currency_config(self): (self.other_currency.rate_ids | self.company_currency.rate_ids).unlink() self.env['res.currency.rate'].create({ 'rate': 0.5, 'currency_id': self.other_currency.id, }) other_cash_journal = self.env['account.journal'].create({ 'name': 'Cash Other', 'type': 'cash', 'company_id': self.company.id, 'code': 'CSHO', 'sequence': 10, 'currency_id': self.other_currency.id }) other_invoice_journal = self.env['account.journal'].create({ 'name': 'Customer Invoice Other', 'type': 'sale', 'company_id': self.company.id, 'code': 'INVO', 'sequence': 11, 'currency_id': self.other_currency.id }) other_sales_journal = self.env['account.journal'].create({ 'name': 'PoS Sale Other', 'type': 'sale', 'code': 'POSO', 'company_id': self.company.id, 'sequence': 12, 'currency_id': self.other_currency.id }) other_pricelist = self.env['product.pricelist'].create({ 'name': 'Public Pricelist Other', 'currency_id': self.other_currency.id, }) other_cash_payment_method = self.env['pos.payment.method'].create({ 'name': 'Cash Other', 'receivable_account_id': self.pos_receivable_account.id, 'is_cash_count': True, 'cash_journal_id': other_cash_journal.id, }) other_bank_payment_method = self.env['pos.payment.method'].create({ 'name': 'Bank Other', 'receivable_account_id': self.pos_receivable_account.id, }) new_config = Form(self.env['pos.config']) new_config.name = 'Shop Other' new_config.invoice_journal_id = other_invoice_journal new_config.journal_id = other_sales_journal new_config.use_pricelist = True new_config.available_pricelist_ids.clear() new_config.available_pricelist_ids.add(other_pricelist) new_config.pricelist_id = other_pricelist new_config.payment_method_ids.clear() new_config.payment_method_ids.add(other_cash_payment_method) new_config.payment_method_ids.add(other_bank_payment_method) config = new_config.save() return config