diff --git a/docsource/modules180-190.rst b/docsource/modules180-190.rst index fd4b86e2175e..a032e5abfd92 100644 --- a/docsource/modules180-190.rst +++ b/docsource/modules180-190.rst @@ -452,7 +452,7 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | |del| l10n_in_edi_ewaybill | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| |new| l10n_in_ewaybill | | | +| |new| l10n_in_ewaybill | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ | |new| l10n_in_ewaybill_irn | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/post-migration.py b/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/post-migration.py new file mode 100644 index 000000000000..15b7fb6d7c2d --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/post-migration.py @@ -0,0 +1,170 @@ +import json +import logging +from datetime import datetime + +from openupgradelib import openupgrade + +_logger = logging.getLogger(__name__) + +# Companion to pre-migration.py: the 18.0 account.move ewaybill data becomes +# one l10n.in.ewaybill row per move, linked via account_move_id. A move +# carries data when a transport field is meaningfully set (Integer distance +# is ORM-written as 0, never NULL; mode '0' means managed-by-transporter) or +# when an in_ewaybill_1_03 EDI document exists: 18.0 generated real e-waybills +# through account_edi, so those rows get state generated/cancel and their NIC +# number + dates from the EDI response attachment instead of looking +# never-generated (which would invite duplicate re-generation against NIC). + +_NIC_DATE_FORMATS = ("%d/%m/%Y %I:%M:%S %p", "%d/%m/%Y %H:%M:%S", "%d/%m/%Y") + + +def _nic_date(value): + for fmt in _NIC_DATE_FORMATS: + try: + return datetime.strptime(str(value), fmt).date() + except (TypeError, ValueError): + continue + return None + + +def _insert_ewaybills(env, legacy): + data_preds = [ + f"COALESCE(am.{legacy['distance']}, 0) <> 0", + f"COALESCE(am.{legacy['mode']}, '0') <> '0'", + ] + [ + f"am.{legacy[c]} IS NOT NULL" + for c in ( + "transportation_doc_date", + "transportation_doc_no", + "transporter_id", + "type_id", + "vehicle_no", + "vehicle_type", + ) + ] + any_data = " OR ".join(data_preds) + if openupgrade.table_exists(env.cr, "account_edi_document"): + any_data += """ + OR am.id IN ( + SELECT d.move_id + FROM account_edi_document d + JOIN account_edi_format f ON f.id = d.edi_format_id + WHERE f.code = 'in_ewaybill_1_03' + AND d.state IN ('sent', 'to_cancel', 'cancelled') + )""" + + openupgrade.logged_query( + env.cr, + f""" + INSERT INTO l10n_in_ewaybill ( + account_move_id, company_id, state, + distance, mode, + transportation_doc_date, transportation_doc_no, + transporter_id, type_id, + vehicle_no, vehicle_type, + create_uid, create_date, write_uid, write_date + ) + SELECT + am.id, + am.company_id, + 'pending'::varchar, + am.{legacy["distance"]}, + CASE WHEN am.{legacy["mode"]} = '0' THEN NULL ELSE am.{legacy["mode"]} END, + am.{legacy["transportation_doc_date"]}, + am.{legacy["transportation_doc_no"]}, + am.{legacy["transporter_id"]}, + am.{legacy["type_id"]}, + am.{legacy["vehicle_no"]}, + am.{legacy["vehicle_type"]}, + COALESCE(am.write_uid, am.create_uid, 1), + COALESCE(am.write_date, am.create_date, NOW() AT TIME ZONE 'UTC'), + COALESCE(am.write_uid, am.create_uid, 1), + COALESCE(am.write_date, am.create_date, NOW() AT TIME ZONE 'UTC') + FROM account_move am + WHERE {any_data} + """, + ) + + +def _mark_generated_from_edi(env): + """E-waybills 18.0 actually generated: state + NIC number/dates from the + EDI response JSON (the attachment stores the response's data object).""" + if not openupgrade.table_exists(env.cr, "account_edi_document"): + return + env.cr.execute( + """ + SELECT d.move_id, d.state, d.attachment_id + FROM account_edi_document d + JOIN account_edi_format f ON f.id = d.edi_format_id + WHERE f.code = 'in_ewaybill_1_03' + AND d.state IN ('sent', 'to_cancel', 'cancelled') + """ + ) + Ewaybill = env["l10n.in.ewaybill"].with_context(tracking_disable=True) + for move_id, edi_state, att_id in env.cr.fetchall(): + ewaybill = Ewaybill.search([("account_move_id", "=", move_id)], limit=1) + if not ewaybill: + continue + vals = {"state": "cancel" if edi_state == "cancelled" else "generated"} + response = {} + if att_id: + raw = env["ir.attachment"].browse(att_id).raw + try: + response = json.loads(raw.decode("utf-8")) + except (ValueError, UnicodeDecodeError, AttributeError): + _logger.info("unparsable ewaybill response for move %s", move_id) + if response.get("ewayBillNo"): + vals["name"] = str(response["ewayBillNo"]) + ewaybill_date = _nic_date(response.get("ewayBillDate")) + if ewaybill_date: + vals["ewaybill_date"] = ewaybill_date + expiry = _nic_date(response.get("validUpto")) + if expiry: + vals["ewaybill_expiry_date"] = expiry + ewaybill.write(vals) + + +def _backfill_computed_and_feature(env): + ewaybills = env["l10n.in.ewaybill"].search([("account_move_id", "!=", False)]) + for fname in ( + "partner_bill_from_id", + "partner_bill_to_id", + "partner_ship_from_id", + "partner_ship_to_id", + ): + env.add_to_compute(ewaybills._fields[fname], ewaybills) + ewaybills.env.flush_all() + # the UI gate: enable for companies that own migrated e-waybills + openupgrade.logged_query( + env.cr, + """ + UPDATE res_company c + SET l10n_in_ewaybill_feature = TRUE + WHERE EXISTS ( + SELECT 1 FROM l10n_in_ewaybill e WHERE e.company_id = c.id + ) + """, + ) + + +@openupgrade.migrate() +def migrate(env, version): + legacy_distance = openupgrade.get_legacy_name("l10n_in_distance") + if not openupgrade.column_exists(env.cr, "account_move", legacy_distance): + return + legacy = { + new_name: openupgrade.get_legacy_name(old_name) + for new_name, old_name in ( + ("distance", "l10n_in_distance"), + ("mode", "l10n_in_mode"), + ("transportation_doc_date", "l10n_in_transportation_doc_date"), + ("transportation_doc_no", "l10n_in_transportation_doc_no"), + ("transporter_id", "l10n_in_transporter_id"), + ("type_id", "l10n_in_type_id"), + ("vehicle_no", "l10n_in_vehicle_no"), + ("vehicle_type", "l10n_in_vehicle_type"), + ) + } + _insert_ewaybills(env, legacy) + _mark_generated_from_edi(env) + _backfill_computed_and_feature(env) diff --git a/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/pre-migration.py b/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/pre-migration.py new file mode 100644 index 000000000000..7c541d36711c --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/pre-migration.py @@ -0,0 +1,104 @@ +from openupgradelib import openupgrade + +# l10n_in_ewaybill 19.0 converges several changes (see PR body for detail): +# the l10n.in.ewaybill[.cancel] models move out of l10n_in_ewaybill_stock, +# six xmlids move with them, three res.company credential columns drop their +# `_edi_` segment, and eight account.move ewaybill columns are preserved as +# legacy for post-migration.py to spawn l10n.in.ewaybill rows. The +# l10n_in_edi_ewaybill -> l10n_in_ewaybill module rename is already handled by +# apriori (update_module_names in base pre-migration), so it needs no work here. + +_renamed_xmlids_from_stock = [ + ( + "l10n_in_ewaybill_stock.l10n_in_ewaybill_form_action", + "l10n_in_ewaybill.l10n_in_ewaybill_form_action", + ), + ( + "l10n_in_ewaybill_stock.action_report_ewaybill", + "l10n_in_ewaybill.action_report_ewaybill", + ), + ( + "l10n_in_ewaybill_stock.access_l10n_in_ewaybill", + "l10n_in_ewaybill.access_l10n_in_ewaybill", + ), + ( + "l10n_in_ewaybill_stock.access_l10n_in_ewaybill_cancel", + "l10n_in_ewaybill.access_l10n_in_ewaybill_cancel", + ), + ( + "l10n_in_ewaybill_stock.l10n_in_ewaybill_comp_rule", + "l10n_in_ewaybill.l10n_in_ewaybill_comp_rule", + ), + ( + "l10n_in_ewaybill_stock.paperformat_ewaybill", + "l10n_in_ewaybill.paperformat_ewaybill", + ), +] + +_preserved_columns_account_move = { + # 18.0 columns owned by l10n_in_edi_ewaybill; DEL in 19.0. We preserve + # them as openupgrade_legacy_19_0_* so post-migration.py can spawn + # l10n.in.ewaybill rows from them. + "account_move": [ + ("l10n_in_distance", None), + ("l10n_in_mode", None), + ("l10n_in_transportation_doc_date", None), + ("l10n_in_transportation_doc_no", None), + ("l10n_in_transporter_id", None), + ("l10n_in_type_id", None), + ("l10n_in_vehicle_no", None), + ("l10n_in_vehicle_type", None), + ], +} + +_renamed_fields_company_credentials = [ + ( + "res.company", + "res_company", + "l10n_in_edi_ewaybill_auth_validity", + "l10n_in_ewaybill_auth_validity", + ), + ( + "res.company", + "res_company", + "l10n_in_edi_ewaybill_password", + "l10n_in_ewaybill_password", + ), + ( + "res.company", + "res_company", + "l10n_in_edi_ewaybill_username", + "l10n_in_ewaybill_username", + ), +] + + +@openupgrade.migrate() +def migrate(env, version): + # Move the model ownership: ir.model + ir.model.fields rows that point + # at l10n.in.ewaybill / l10n.in.ewaybill.cancel get their `module` + # column rewritten from l10n_in_ewaybill_stock to l10n_in_ewaybill. + # The SQL table itself is not renamed (the table name is identical). + openupgrade.update_module_moved_models( + env.cr, "l10n.in.ewaybill", "l10n_in_ewaybill_stock", "l10n_in_ewaybill" + ) + openupgrade.update_module_moved_models( + env.cr, "l10n.in.ewaybill.cancel", "l10n_in_ewaybill_stock", "l10n_in_ewaybill" + ) + + # Six XML records (action, report, two access rules, rule, paperformat) + # ship under l10n_in_ewaybill in 19.0 but lived under + # l10n_in_ewaybill_stock in 18.0. Rename so customer references to + # them survive the upgrade. + openupgrade.rename_xmlids(env.cr, _renamed_xmlids_from_stock) + + # Three res.company credential columns drop the `_edi_` segment. + # apriori's update_module_names already moved the ir_model_fields + # ownership; rename_fields handles the SQL column rename + filter / + # export / translation side effects. + openupgrade.rename_fields(env, _renamed_fields_company_credentials) + + # Preserve the 8 account.move ewaybill columns before Odoo's update_db + # drops them. post-migration.py consumes the legacy values to spawn + # l10n.in.ewaybill rows. + openupgrade.rename_columns(env.cr, _preserved_columns_account_move) diff --git a/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..3c3907cada48 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_in_ewaybill/19.0.2.0/upgrade_analysis_work.txt @@ -0,0 +1,186 @@ +---Models in module 'l10n_in_ewaybill'--- +model l10n.in.ewaybill (moved from l10n_in_ewaybill_stock) +model l10n.in.ewaybill.cancel (moved from l10n_in_ewaybill_stock) [transient] + +# DONE: model ownership rewritten via update_module_moved_models in pre-migration; table name unchanged. + +---Fields in module 'l10n_in_ewaybill'--- +l10n_in_edi_ewaybill / account.move / l10n_in_distance (integer) : DEL +l10n_in_edi_ewaybill / account.move / l10n_in_mode (selection) : DEL selection_keys: ['0', '1', '2', '3', '4'] +l10n_in_edi_ewaybill / account.move / l10n_in_transportation_doc_date (date): DEL +l10n_in_edi_ewaybill / account.move / l10n_in_transportation_doc_no (char): DEL +l10n_in_edi_ewaybill / account.move / l10n_in_transporter_id (many2one): DEL relation: res.partner +l10n_in_edi_ewaybill / account.move / l10n_in_type_id (many2one) : DEL relation: l10n.in.ewaybill.type +l10n_in_edi_ewaybill / account.move / l10n_in_vehicle_no (char) : DEL +l10n_in_edi_ewaybill / account.move / l10n_in_vehicle_type (selection): DEL selection_keys: ['O', 'R'] + +# DONE: preserved as legacy columns in pre-migration; post-migration spawns one +# l10n.in.ewaybill row per move with meaningful data (distance<>0, mode<>'0', +# or an in_ewaybill_1_03 EDI document); 18-generated e-waybills get state +# generated/cancel + NIC number/dates from the EDI response attachment, and +# the stored computed partner fields are recomputed. + +l10n_in_edi_ewaybill / res.company / l10n_in_edi_ewaybill_auth_validity (datetime): DEL +l10n_in_edi_ewaybill / res.company / l10n_in_edi_ewaybill_password (char): DEL +l10n_in_edi_ewaybill / res.company / l10n_in_edi_ewaybill_username (char): DEL + +# DONE: three credential columns renamed (drop _edi_) via rename_fields in pre-migration. + +l10n_in_ewaybill / account.move / l10n_in_ewaybill_ids (one2many): NEW relation: l10n.in.ewaybill + +# NOTHING TO DO: reverse side of the model move; no scalar column. + +l10n_in_ewaybill / l10n.in.ewaybill / _order : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / access_token (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / access_url (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / access_warning (text) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / account_move_id (many2one) : NEW relation: account.move +l10n_in_ewaybill / l10n.in.ewaybill / activity_calendar_event_id (many2one): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_date_deadline (date) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_exception_decoration (selection): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_exception_icon (char): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_ids (one2many) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_state (selection) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_summary (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_type_icon (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_type_id (many2one) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / activity_user_id (many2one) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / attachment_file (binary) : NEW attachment: True +l10n_in_ewaybill / l10n.in.ewaybill / blocking_level (selection) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / cancel_reason (selection) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / cancel_remarks (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / company_currency_id (many2one): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / company_id (many2one) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / content (binary) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / display_name (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / distance (integer) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / document_date (datetime) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / document_number (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / error_message (html) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / ewaybill_date (date) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / ewaybill_expiry_date (date) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / has_message (boolean) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / is_bill_from_editable (boolean): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / is_bill_to_editable (boolean) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / is_ship_from_editable (boolean): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / is_ship_to_editable (boolean) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_attachment_count (integer): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_follower_ids (one2many): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_has_error (boolean) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_has_error_counter (integer): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_has_sms_error (boolean): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_ids (one2many) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_is_follower (boolean) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_needaction (boolean) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_needaction_counter (integer): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / message_partner_ids (many2many): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / mode (selection) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / my_activity_date_deadline (date): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / name (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / partner_bill_from_id (many2one): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / partner_bill_to_id (many2one) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / partner_ship_from_id (many2one): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / partner_ship_to_id (many2one) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / rating_ids (one2many) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / state (selection) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / sub_type_code (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / supply_type (selection) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / transportation_doc_date (date): previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / transportation_doc_no (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / transporter_id (many2one) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / type_id (many2one) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / vehicle_no (char) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / vehicle_type (selection) : previously in module l10n_in_ewaybill_stock +l10n_in_ewaybill / l10n.in.ewaybill / website_message_ids (one2many): previously in module l10n_in_ewaybill_stock + +# DONE: existing fields of the moved model; ownership transfers with update_module_moved_models. account_move_id / attachment_file are NEW and filled by Odoo's update_db (FK column + ir.attachment). + +l10n_in_ewaybill / res.company / l10n_in_ewaybill_auth_validity (datetime): NEW +l10n_in_ewaybill / res.company / l10n_in_ewaybill_feature (boolean): NEW +l10n_in_ewaybill / res.company / l10n_in_ewaybill_password (char): NEW +l10n_in_ewaybill / res.company / l10n_in_ewaybill_username (char): NEW + +# DONE: auth_validity / password / username receive values from the renamed +# _edi_ columns; l10n_in_ewaybill_feature is enabled in post-migration for +# companies owning migrated e-waybills (update_db's default leaves it off). + +l10n_in_ewaybill_stock / l10n.in.ewaybill / company_id (many2one) : is now stored +l10n_in_ewaybill_stock / l10n.in.ewaybill / company_id (many2one) : not related anymore +l10n_in_ewaybill_stock / l10n.in.ewaybill / company_id (many2one) : now a function +l10n_in_ewaybill_stock / l10n.in.ewaybill / document_date (datetime) : not related anymore +l10n_in_ewaybill_stock / l10n.in.ewaybill / document_date (datetime) : now a function +l10n_in_ewaybill_stock / l10n.in.ewaybill / document_number (char) : not related anymore +l10n_in_ewaybill_stock / l10n.in.ewaybill / document_number (char) : now a function + +# NOTHING TO DO: related -> stored function; ORM recomputes after install. + +l10n_in_ewaybill_stock / l10n.in.ewaybill / state (selection) : selection_keys removed: [challan] + +# NOTHING TO DO: standard selection-keys narrowing; 'challan' was internal-only. + +---XML records in module 'l10n_in_ewaybill'--- +DEL account.edi.format: l10n_in_edi_ewaybill.edi_in_ewaybill_json_1_03 + +# NOTHING TO DO: legacy edi.format removed by the standard module-upgrade flow. + +NEW ir.actions.act_window: l10n_in_ewaybill.l10n_in_ewaybill_form_action [renamed from l10n_in_ewaybill_stock module] +NEW ir.actions.report: l10n_in_ewaybill.action_report_ewaybill [renamed from l10n_in_ewaybill_stock module] +NEW ir.model.access: l10n_in_ewaybill.access_l10n_in_ewaybill [renamed from l10n_in_ewaybill_stock module] +NEW ir.model.access: l10n_in_ewaybill.access_l10n_in_ewaybill_cancel [renamed from l10n_in_ewaybill_stock module] + +# DONE: 4 of the 6 stock xmlids renamed via rename_xmlids in pre-migration (action, report, 2 access rules). + +NEW ir.model.access: l10n_in_ewaybill.access_l10n_in_ewaybill_type [renamed from l10n_in_edi_ewaybill module] + +# DONE: l10n_in_edi_ewaybill -> l10n_in_ewaybill module rename handled by apriori (update_module_names). + +NEW ir.model.access: l10n_in_ewaybill.view_l10n_in_ewaybill + +# NOTHING TO DO: NEW record installs via standard module-data XML. + +NEW ir.rule: l10n_in_ewaybill.l10n_in_ewaybill_comp_rule [renamed from l10n_in_ewaybill_stock module] (noupdate) + +# DONE: stock xmlid renamed via rename_xmlids in pre-migration. + +NEW ir.ui.view: l10n_in_ewaybill.invoice_form_inherit_l10n_in_ewaybill +NEW ir.ui.view: l10n_in_ewaybill.l10n_in_ewaybill_form_view +NEW ir.ui.view: l10n_in_ewaybill.l10n_in_ewaybill_report_invoice_document_inherit +NEW ir.ui.view: l10n_in_ewaybill.report_ewaybill +NEW ir.ui.view: l10n_in_ewaybill.res_config_settings_view_form_inherit_l10n_in_edi_ewaybill +NEW ir.ui.view: l10n_in_ewaybill.view_ewaybill_cancel_form +NEW ir.ui.view: l10n_in_ewaybill.view_invoice_list_inherit_l10n_in_ewaybill + +# NOTHING TO DO: NEW view records install via standard module-data XML. + +DEL ir.model.access: l10n_in_edi_ewaybill.access_l10n_in_ewaybill_type [renamed to l10n_in_ewaybill module] + +# DONE: renamed counterpart of access_l10n_in_ewaybill_type (apriori module rename). + +DEL ir.ui.view: l10n_in_edi_ewaybill.invoice_form_inherit_l10n_in_edi_ewaybill +DEL ir.ui.view: l10n_in_edi_ewaybill.l10n_in_einvoice_report_invoice_document_inherit +DEL ir.ui.view: l10n_in_edi_ewaybill.res_config_settings_view_form_inherit_l10n_in_edi_ewaybill + +# NOTHING TO DO: obsolete views removed by the standard module-upgrade flow. + +NEW l10n.in.ewaybill.type: l10n_in_ewaybill.type_bill_of_entry_sub_skd_ckd_lots [renamed from l10n_in_edi_ewaybill module] +NEW l10n.in.ewaybill.type: l10n_in_ewaybill.type_bill_of_entry_sub_type_import [renamed from l10n_in_edi_ewaybill module] +NEW l10n.in.ewaybill.type: l10n_in_ewaybill.type_bill_of_supply_sub_type_export [renamed from l10n_in_edi_ewaybill module] +NEW l10n.in.ewaybill.type: l10n_in_ewaybill.type_bill_of_supply_sub_type_skd_ckd_lots [renamed from l10n_in_edi_ewaybill module] +NEW l10n.in.ewaybill.type: l10n_in_ewaybill.type_bill_of_supply_sub_type_supply [renamed from l10n_in_edi_ewaybill module] +NEW l10n.in.ewaybill.type: l10n_in_ewaybill.type_tax_invoice_sub_type_export [renamed from l10n_in_edi_ewaybill module] +NEW l10n.in.ewaybill.type: l10n_in_ewaybill.type_tax_invoice_sub_type_skd_ckd_lots [renamed from l10n_in_edi_ewaybill module] +NEW l10n.in.ewaybill.type: l10n_in_ewaybill.type_tax_invoice_sub_type_supply [renamed from l10n_in_edi_ewaybill module] +DEL l10n.in.ewaybill.type: l10n_in_edi_ewaybill.type_bill_of_entry_sub_skd_ckd_lots [renamed to l10n_in_ewaybill module] +DEL l10n.in.ewaybill.type: l10n_in_edi_ewaybill.type_bill_of_entry_sub_type_import [renamed to l10n_in_ewaybill module] +DEL l10n.in.ewaybill.type: l10n_in_edi_ewaybill.type_bill_of_supply_sub_type_export [renamed to l10n_in_ewaybill module] +DEL l10n.in.ewaybill.type: l10n_in_edi_ewaybill.type_bill_of_supply_sub_type_skd_ckd_lots [renamed to l10n_in_ewaybill module] +DEL l10n.in.ewaybill.type: l10n_in_edi_ewaybill.type_bill_of_supply_sub_type_supply [renamed to l10n_in_ewaybill module] +DEL l10n.in.ewaybill.type: l10n_in_edi_ewaybill.type_tax_invoice_sub_type_export [renamed to l10n_in_ewaybill module] +DEL l10n.in.ewaybill.type: l10n_in_edi_ewaybill.type_tax_invoice_sub_type_skd_ckd_lots [renamed to l10n_in_ewaybill module] +DEL l10n.in.ewaybill.type: l10n_in_edi_ewaybill.type_tax_invoice_sub_type_supply [renamed to l10n_in_ewaybill module] + +# DONE: 8 NEW/DEL type pairs are the same records under the renamed module; apriori (update_module_names) rewrites the module, no rename_xmlids needed. + +NEW report.paperformat: l10n_in_ewaybill.paperformat_ewaybill [renamed from l10n_in_ewaybill_stock module] + +# DONE: stock xmlid renamed via rename_xmlids in pre-migration.