-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpost-migration.py
154 lines (133 loc) · 5.35 KB
/
post-migration.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
from openupgradelib import openupgrade
import logging
_logger = logging.getLogger(__name__)
@openupgrade.migrate()
def migrate(env, version):
_logger.info('Running post-migrate script for l10n_uy_edi')
# Popular nueva tabla con datos en el account move
openupgrade.logged_query(env.cr, """
INSERT INTO l10n_uy_edi_document (move_id, state, uuid, message, request_datetime)
SELECT
move.id as move_id,
move.l10n_uy_cfe_state_bu as state,
move.l10n_uy_cfe_uuid_bu as uuid,
move.l10n_uy_ucfe_msg_bu as message,
TO_TIMESTAMP(TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') as request_datetime
FROM account_move move
JOIN account_journal journal ON move.journal_id = journal.id
WHERE journal.l10n_uy_edi_type = 'electronic' AND move.l10n_uy_cfe_state_bu NOTNULL
""")
openupgrade.logged_query(env.cr, """
UPDATE ir_attachment SET
res_id = subc.edi_id,
res_model = 'l10n_uy_edi.document',
res_field = 'attachment_file'
FROM (SELECT edi_doc.id AS edi_id, edi_doc.move_id from l10n_uy_edi_document edi_doc JOIN account_move ON account_move.id = edi_doc.move_id) as subc
WHERE subc.move_id = res_id AND name like '%.xml';
""")
for rec in env['l10n_uy_edi.document'].search([]):
datas = env['ir.attachment'].search([('res_id', '=', rec.id), ('res_model', '=', 'l10n_uy_edi.document')]).datas
if datas:
rec.attachment_file = datas
# Agregar relacion entre tabla edi document y move. campo 'l10n_uy_edi_document_id'
openupgrade.logged_query(env.cr, """
UPDATE account_move move
SET
l10n_uy_edi_document_id = edi.id
FROM l10n_uy_edi_document AS edi
WHERE edi.move_id = move.id
""")
openupgrade.logged_query(env.cr, """
UPDATE account_journal
SET
l10n_uy_edi_type = 'manual'
WHERE l10n_uy_edi_type = 'preprinted'
""")
# Actualizamos los select de los estados del cfe
openupgrade.logged_query(env.cr, """
UPDATE account_move
SET
l10n_uy_edi_cfe_state = 'error'
WHERE l10n_uy_cfe_state_bu IN ('xml_error', 'connection_error', 'ucfe_error');
""")
openupgrade.logged_query(env.cr, """
UPDATE account_move
SET
l10n_uy_edi_cfe_state = Null
WHERE l10n_uy_cfe_state_bu IN ('not_apply', 'draft_cfe');
""")
# Cambios en las addendas
openupgrade.logged_query(env.cr, """
UPDATE l10n_uy_edi_addenda
SET
type = 'issuer'
WHERE type = 'emisor'
""")
openupgrade.logged_query(env.cr, """
UPDATE l10n_uy_edi_addenda
SET
type = 'receiver'
WHERE type = 'receptor'
""")
openupgrade.logged_query(env.cr, """
UPDATE l10n_uy_edi_addenda
SET
type = 'cfe_doc'
WHERE type = 'comprobante'
""")
openupgrade.logged_query(env.cr, """
UPDATE l10n_uy_edi_addenda
SET
type = 'addenda'
WHERE type = 'adenda'
""")
#TODO opcional: vincular las adendas con las facturas
openupgrade.logged_query(env.cr, """
INSERT INTO l10n_uy_edi_addenda (name, type, content, company_id)
SELECT
move.l10n_uy_additional_info_bu AS name,
'cfe_doc' AS type,
move.l10n_uy_additional_info_bu AS content,
move.company_id AS company_id
FROM account_move move
WHERE move.l10n_uy_additional_info_bu NOTNULL
""")
openupgrade.logged_query(env.cr, """
INSERT INTO l10n_uy_edi_addenda (name, type, content)
SELECT
product.l10n_uy_additional_info_pro_bu AS name,
'item' AS type,
product.l10n_uy_additional_info_pro_bu AS content
-- product.product_tmpl_id.company_id AS company_id
FROM product_product product
WHERE product.l10n_uy_additional_info_pro_bu NOTNULL
""")
openupgrade.logged_query(env.cr, """
INSERT INTO l10n_uy_edi_addenda (name, type, content, company_id)
SELECT
partner.l10n_uy_additional_info_part_bu AS name,
'receiver' AS type,
partner.l10n_uy_additional_info_part_bu AS content,
partner.company_id AS company_id
FROM res_partner partner
WHERE partner.l10n_uy_additional_info_part_bu NOTNULL
""")
env['l10n_uy_edi.addenda'].search([('content', 'like', '{%}')]).is_legend = True
#Impuestos
query= f"""
SELECT tax.id
FROM account_tax_group AS tax_group
INNER JOIN account_tax AS tax
ON tax_group.id = tax.tax_group_id
WHERE tax_group.l10n_uy_vat_code_bu NOTNULL
"""
env.cr.execute(query)
tax_ids = [tax.get('id') for tax in env.cr.dictfetchall()]
env['account.tax'].browse(tax_ids).write({'l10n_uy_tax_category': 'vat'})
# Seteamos los ambientes
env['res.company'].search([('l10n_uy_edi_ucfe_env', '=', False)]).l10n_uy_edi_ucfe_env = 'demo'
# Los re-creamos
cron_ucfe_notif = env.ref('l10n_uy_edi.ir_cron_get_ucfe_notif', raise_if_not_found=False)
cron_vendor_bills_received = env.ref('l10n_uy_edi.ir_cron_get_vendor_bills_received', raise_if_not_found=False)
cron_ucfe_notif.unlink() if cron_ucfe_notif else False
cron_vendor_bills_received.unlink() if cron_vendor_bills_received else False