Odoo18-Base/addons/l10n_uy/demo/account_demo.py

529 lines
28 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import time
import logging
from odoo import api, models, Command
from odoo.exceptions import UserError, ValidationError
_logger = logging.getLogger(__name__)
class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
@api.model
def _get_demo_data(self, company=False):
if company.account_fiscal_country_id.code == "UY":
return {
'res.partner': self._l10n_uy_get_demo_data_res_partner(company),
'account.move': self._l10n_uy_get_demo_data_move(company),
'account.move.reversal': self._l10n_uy_get_demo_data_move_reversal(company),
}
else:
return super()._get_demo_data(company)
def _post_load_demo_data(self, company=False):
if company.account_fiscal_country_id.code != "UY":
return super()._post_load_demo_data(company)
invoices = (
self.ref('demo_invoice_1')
+ self.ref('demo_invoice_2')
+ self.ref('demo_invoice_3')
+ self.ref('demo_invoice_4')
+ self.ref('demo_invoice_5')
+ self.ref('demo_invoice_6')
+ self.ref('demo_invoice_8')
+ self.ref('demo_invoice_9')
+ self.ref('demo_sup_invoice_1')
+ self.ref('demo_sup_invoice_2')
+ self.ref('demo_sup_invoice_3')
+ self.ref('demo_sup_invoice_6')
+ self.ref('demo_sup_invoice_7')
+ self.ref('demo_sup_invoice_8')
+ self.ref('demo_sup_invoice_9')
)
# the invoice_extract acts like a placeholder for the OCR to be ran and
# doesn't contain any lines yet
for move in invoices:
try:
move.action_post()
except (UserError, ValidationError):
_logger.exception('Error while posting invoices')
# Post the reversal moves
invoices_to_revert = (
self.ref('demo_refund_invoice_1')
+ self.ref('demo_refund_invoice_2')
+ self.ref('demo_refund_invoice_3')
+ self.ref('demo_refund_invoice_4')
+ self.ref('demo_sup_refund_invoice_3')
+ self.ref('demo_sup_refund_invoice_2')
)
for move in invoices_to_revert:
try:
self.env['account.move'].browse(move.refund_moves().get('res_id')).action_post()
except (UserError, ValidationError):
_logger.exception('Error while posting reversal moves')
@api.model
def _l10n_uy_get_demo_data_move(self, company=False):
cid = company.id or self.env.company.id
sale_journal = self.env['account.journal'].search(
domain=[
*self.env['account.journal']._check_company_domain(cid),
('type', '=', 'sale')
], limit=1,
)
purchase_journal = self.env['account.journal'].search(
domain=[
*self.env['account.journal']._check_company_domain(cid),
('type', '=', 'purchase')
], limit=1,
)
return {
# Customer invoice demo
'demo_invoice_1': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_4',
'journal_id': sale_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-01'),
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_2', 'price_unit': 642.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 4}),
Command.create({'product_id': 'product.product_product_16', 'price_unit': 25.0, 'quantity': 20}),
Command.create({'product_id': 'product.product_product_20', 'price_unit': 1950.0, 'quantity': 4}),
],
},
'demo_invoice_2': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'base.res_partner_4',
'invoice_user_id': 'base.user_demo',
'journal_id': sale_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-05'),
'l10n_latam_document_type_id': 'l10n_uy.dc_e_inv',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 642.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_25', 'price_unit': 3245.0, 'quantity': 2}),
Command.create({'product_id': 'product.consu_delivery_01', 'price_unit': 4000.0, 'quantity': 5}),
],
},
'demo_invoice_3': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'l10n_uy.partner_cfu',
'invoice_user_id': 'base.user_demo',
'journal_id': sale_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-10'),
'l10n_latam_document_type_id': 'l10n_uy.dc_e_ticket',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 642.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_2', 'price_unit': 642.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_delivery_02', 'price_unit': 40.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_order_01', 'price_unit': 280.0, 'quantity': 3}),
Command.create({'product_id': 'product.product_product_3', 'price_unit': 450.0, 'quantity': 2}),
],
},
'demo_invoice_4': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'demo_partner_4',
'invoice_user_id': 'base.user_demo',
'journal_id': sale_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-13'),
'l10n_latam_document_type_id': 'l10n_uy.dc_e_inv',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 1000.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_3', 'price_unit': 450.0, 'quantity': 2}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 4}),
Command.create({'product_id': 'product.product_product_13', 'price_unit': 85.0, 'quantity': 3}),
],
'currency_id': 'base.USD',
},
'demo_invoice_5': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'res_partner_foreign',
'invoice_user_id': 'base.user_demo',
'journal_id': sale_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-11'),
'l10n_latam_document_type_id': 'l10n_uy.dc_e_inv_exp',
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_02', 'price_unit': 4000.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_3', 'price_unit': 450.0, 'quantity': 2}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 4}),
Command.create({'product_id': 'product.product_product_13', 'price_unit': 85.0, 'quantity': 3}),
Command.create({'product_id': 'product.consu_delivery_03', 'price_unit': 2350.0, 'quantity': 1}),
],
'currency_id': 'base.USD',
},
'demo_invoice_6': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'l10n_uy.partner_cfu',
'invoice_user_id': 'base.user_demo',
'journal_id': sale_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-14'),
'l10n_latam_document_type_id': 'l10n_uy.dc_e_ticket',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_1', 'price_unit': 216.0, 'quantity': 9}),
Command.create({'product_id': 'product.product_delivery_01', 'price_unit': 70.0, 'quantity': 11}),
Command.create({'product_id': 'product.product_delivery_02', 'price_unit': 40.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_order_01', 'price_unit': 280.0, 'quantity': 3}),
Command.create({'product_id': 'product.consu_delivery_02', 'price_unit': 4000.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_3', 'price_unit': 450.0, 'quantity': 2}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 4}),
Command.create({'product_id': 'product.product_product_13', 'price_unit': 85.0, 'quantity': 3}),
Command.create({'product_id': 'product.product_product_16', 'price_unit': 25.0, 'quantity': 20}),
Command.create({'product_id': 'product.product_product_20', 'price_unit': 1950.0, 'quantity': 4}),
],
},
'demo_invoice_7': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'l10n_uy.partner_cfu',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-14'),
'l10n_latam_document_type_id': 'l10n_uy.dc_e_ticket',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_1', 'price_unit': 216.0, 'quantity': 3}),
Command.create({'product_id': 'product.product_delivery_01', 'price_unit': 70.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_delivery_02', 'price_unit': 40.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_3', 'price_unit': 450.0, 'quantity': 7}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 4}),
Command.create({'product_id': 'product.product_product_16', 'price_unit': 25.0, 'quantity': 16}),
Command.create({'product_id': 'product.product_product_20', 'price_unit': 1950.0, 'quantity': 2}),
],
},
'demo_invoice_8': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'demo_partner_5',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-01'),
'l10n_latam_document_type_id': 'l10n_uy.dc_dn_e_inv',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 642.0, 'quantity': 4}),
Command.create({'product_id': 'product.product_product_25', 'price_unit': 3245.0, 'quantity': 2}),
Command.create({'product_id': 'product.consu_delivery_01', 'price_unit': 4000.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 3}),
],
},
'demo_invoice_9': {
'company_id': company.id,
'move_type': 'out_invoice',
'partner_id': 'demo_partner_4',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-05'),
'l10n_latam_document_type_id': 'l10n_uy.dc_e_ticket',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 642.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_25', 'price_unit': 3245.0, 'quantity': 2}),
Command.create({'product_id': 'product.consu_delivery_01', 'price_unit': 4000.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_delivery_02', 'price_unit': 4000.0, 'quantity': 1}),
],
},
# Supplier invoice demo
'demo_sup_invoice_1': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'demo_partner_5',
'invoice_user_id': 'base.user_demo',
'journal_id': purchase_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-01',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_inv',
'l10n_latam_document_number': 'AA0000008',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_2', 'price_unit': 642.0, 'quantity': 3}),
Command.create({'product_id': 'product.product_product_27', 'price_unit': 228.0, 'quantity': 1}),
],
},
'demo_sup_invoice_2': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'res_partner_foreign',
'invoice_user_id': 'base.user_demo',
'journal_id': purchase_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-01',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_inv_exp',
'l10n_latam_document_number': 'AA0000009',
'currency_id': 'base.USD',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 642.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_2', 'price_unit': 2584.0, 'quantity': 2}),
],
},
'demo_sup_invoice_3': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'demo_partner_4',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-26',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_inv',
'l10n_latam_document_number': 'AA0000010',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_2', 'price_unit': 1642.0, 'quantity': 8}),
],
},
'demo_sup_invoice_4': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'l10n_uy.partner_cfu',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-26',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_ticket',
'l10n_latam_document_number': 'AA0000011',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_2', 'price_unit': 1642.0, 'quantity': 3}),
],
},
'demo_sup_invoice_5': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'res_partner_foreign',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-01',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_inv_exp',
'l10n_latam_document_number': 'AA0000012',
'currency_id': 'base.USD',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 642.0, 'quantity': 4}),
Command.create({'product_id': 'product.product_product_2', 'price_unit': 3245.0, 'quantity': 1}),
],
},
'demo_sup_invoice_6': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'res_partner_foreign',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-01',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_inv_exp',
'l10n_latam_document_number': 'AA0000013',
'currency_id': 'base.USD',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 335.0, 'quantity': 8}),
Command.create({'product_id': 'product.product_product_2', 'price_unit': 9584.0, 'quantity': 16}),
],
},
'demo_sup_invoice_7': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'demo_partner_5',
'invoice_user_id': 'base.user_demo',
'journal_id': purchase_journal.id,
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-01',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_ticket',
'l10n_latam_document_number': 'AA0000014',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 642.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_product_25', 'price_unit': 3245.0, 'quantity': 2}),
Command.create({'product_id': 'product.consu_delivery_01', 'price_unit': 4000.0, 'quantity': 5}),
Command.create({'product_id': 'product.product_delivery_02', 'price_unit': 4000.0, 'quantity': 1}),
],
},
'demo_sup_invoice_8': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'l10n_uy.partner_cfu',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-01',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_ticket',
'l10n_latam_document_number': 'AA0000015',
'invoice_line_ids': [
Command.create({'product_id': 'product.consu_delivery_02', 'price_unit': 4000.0, 'quantity': 7}),
Command.create({'product_id': 'product.product_product_3', 'price_unit': 450.0, 'quantity': 6}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_product_13', 'price_unit': 85.0, 'quantity': 1}),
Command.create({'product_id': 'product.consu_delivery_03', 'price_unit': 2350.0, 'quantity': 4}),
],
},
'demo_sup_invoice_9': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'demo_partner_4',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-01',
'l10n_latam_document_type_id': 'l10n_uy.dc_e_ticket',
'l10n_latam_document_number': 'AA0000016',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_27', 'price_unit': 1000.0, 'quantity': 8}),
Command.create({'product_id': 'product.product_product_3', 'price_unit': 450.0, 'quantity': 7}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_product_13', 'price_unit': 85.0, 'quantity': 2}),
],
},
'demo_sup_invoice_10': {
'company_id': company.id,
'move_type': 'in_invoice',
'partner_id': 'demo_partner_5',
'invoice_user_id': 'base.user_demo',
'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m') + '-01',
'l10n_latam_document_number': 'AA0000017',
'invoice_line_ids': [
Command.create({'product_id': 'product.product_product_2', 'price_unit': 642.0, 'quantity': 1}),
Command.create({'product_id': 'product.product_product_12', 'price_unit': 120.0, 'quantity': 4}),
Command.create({'product_id': 'product.product_product_16', 'price_unit': 25.0, 'quantity': 20}),
Command.create({'product_id': 'product.product_product_20', 'price_unit': 1950.0, 'quantity': 4}),
],
},
}
@api.model
def _l10n_uy_get_demo_data_move_reversal(self, company=False):
cid = company.id or self.env.company.id
sale_journal = self.env['account.journal'].search(
domain=[
*self.env['account.journal']._check_company_domain(cid),
('type', '=', 'sale')
], limit=1,
)
purchase_journal = self.env['account.journal'].search(
domain=[
*self.env['account.journal']._check_company_domain(cid),
('type', '=', 'purchase')
], limit=1,
)
return {
# Account Customer Refund
# Create draft refund for invoice 3
'demo_refund_invoice_1': {
'reason': 'Venta Cancelada',
'move_ids': 'demo_invoice_1',
'journal_id': sale_journal.id,
'date': time.strftime('%Y-%m') + '-01'
},
# Create draft refund for invoice 4
'demo_refund_invoice_2': {
'reason': 'Venta Cancelada',
'move_ids': 'demo_invoice_4',
'l10n_latam_document_type_id': 'l10n_uy.dc_cn_e_ticket',
'journal_id': sale_journal.id,
'date': time.strftime('%Y-%m') + '-01'
},
'demo_refund_invoice_3': {
'reason': 'Venta Cancelada',
'move_ids': 'demo_invoice_5',
'l10n_latam_document_type_id': 'l10n_uy.dc_cn_e_inv_exp',
'journal_id': sale_journal.id,
'date': time.strftime('%Y-%m') + '-01'
},
'demo_refund_invoice_4': {
'reason': 'Venta Cancelada',
'move_ids': 'demo_invoice_6',
'l10n_latam_document_type_id': 'l10n_uy.dc_cn_e_ticket',
'journal_id': sale_journal.id,
'date': time.strftime('%Y-%m') + '-01'
},
# Account supplier refund
'demo_sup_refund_invoice_3': {
'reason': 'Mercadería defectuosa',
'l10n_latam_document_number': 'BB0123456',
'move_ids': 'demo_sup_invoice_1',
'l10n_latam_document_type_id': 'l10n_uy.dc_cn_e_inv',
'journal_id': purchase_journal.id,
'date': time.strftime('%Y-%m') + '-01'
},
'demo_sup_refund_invoice_2': {
'reason': 'Venta cancelada',
'l10n_latam_document_number': 'BB0123457',
'move_ids': 'demo_sup_invoice_2',
'l10n_latam_document_type_id': 'l10n_uy.dc_cn_e_inv_exp',
'journal_id': purchase_journal.id,
'date': time.strftime('%Y-%m') + '-01'
},
'demo_sup_refund_invoice_1': {
'reason': 'Venta cancelada',
'l10n_latam_document_number': 'BB0123458',
'move_ids': 'demo_sup_invoice_7',
'l10n_latam_document_type_id': 'l10n_uy.dc_cn_e_ticket',
'journal_id': purchase_journal.id,
'date': time.strftime('%Y-%m') + '-01'
},
}
@api.model
def _l10n_uy_get_demo_data_res_partner(self, company=False):
return {
'demo_partner_4': {
'name': 'Global Solutions Corp',
'l10n_latam_identification_type_id': 'l10n_uy.it_rut',
'vat': '218435730016',
'street': 'Avenida Central 5678',
'city': 'Punta del Este',
'state_id': 'base.state_uy_01',
'country_id': 'base.uy',
'email': 'info@globalsolutions.com',
},
'demo_partner_5': {
'name': 'Tech Innovations S.A.',
'l10n_latam_identification_type_id': 'l10n_uy.it_rut',
'vat': '219999830019',
'street': 'Avenida de la Libertad 1234',
'city': 'Montevideo',
'state_id': 'base.state_uy_01',
'country_id': 'base.uy',
'email': 'contact@techinnovations.com',
},
'demo_partner_6': {
'name': 'CORREO URUGUAYO',
'l10n_latam_identification_type_id': 'l10n_uy.it_rut',
'vat': '214130990011',
'street': 'Buenos Aires 451',
'city': 'Montevideo',
'state_id': 'base.state_uy_10',
'country_id': 'base.uy',
'email': 'correo@example.com',
},
# Foreign Company
'res_partner_foreign': {
'name': 'Foreign Inc',
'l10n_latam_identification_type_id': 'l10n_latam_base.it_vat',
'is_company': True,
'vat': '17-2038053',
'zip': '95380',
'street': '7841 Red Road',
'city': 'San Francisco',
'state_id': 'base.state_us_5',
'country_id': 'base.us',
'email': 'foreing@example.com',
'phone': '(123)-456-7890',
'website': 'http://www.foreign-inc.com',
},
# Resident Alien (Foreign living at Uruguay)
'res_partner_resident_alien': {
'name': 'Resident Alien',
'l10n_latam_identification_type_id': 'l10n_uy.it_nie',
'vat': '93:402.010-1',
'zip': '2343',
'street': 'Calle False 1234',
'city': 'Montevideo',
'state_id': 'base.state_uy_10',
'country_id': 'base.uy',
'email': 'nie@example.com',
},
}