diff --git a/before/072070-bank-account.py b/before/072070-bank-account.py new file mode 100755 index 0000000..dc3f739 --- /dev/null +++ b/before/072070-bank-account.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +import sys + +dbname = sys.argv[1] +config_file = sys.argv[2] +from trytond.config import config as CONFIG +CONFIG.update_etc(config_file) + +from trytond.pool import Pool +from trytond.transaction import Transaction +import logging +from trytond import __version__ + +trytond_version = float('.'.join(__version__.split('.')[:2])) + +Pool.start() +pool = Pool(dbname) +pool.init() + +context = {'active_test': False} + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +ch = logging.StreamHandler(sys.stdout) +ch.setLevel(logging.DEBUG) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +ch.setFormatter(formatter) +logger.addHandler(ch) + +with Transaction().start(dbname, 1, context=context): + Company = pool.get('company.company') + ModelData = pool.get('ir.model.data') + Category = pool.get('product.category') + Template = pool.get('product.template') + Account = pool.get('account.account') + Tax = pool.get('account.tax') + + Payment = pool.get('account.payment') + Line = pool.get('account.move.line') + SepaMandate = pool.get('account.payment.sepa.mandate') + + BankNumber = pool.get('bank.account.number') + + cursor = Transaction().connection.cursor() + + # 1. drop _sql_constraints + # 2. bank_account-party_party data to party_party-bank_account-company table + query = "ALTER TABLE bank_account_number DROP CONSTRAINT IF EXISTS bank_account_number_number_iban_exclude" + cursor.execute(query) + query = "ALTER TABLE bank_account_number DROP CONSTRAINT IF EXISTS bank_account_number_account_iban_exclude" + cursor.execute(query) + + # 1. move data to new + query = 'alter table "party_party-bank_account-company" ADD COLUMN IF NOT EXISTS payable_bank_account int'; + query = 'alter table "party_party-bank_account-company" ADD COLUMN IF NOT EXISTS receivable_bank_account int'; + cursor.execute(query) + + query = 'select account, owner, company, payable_bank_account, receivable_bank_account from "bank_account-party_party"' + cursor.execute(query) + bank_rows = {} + for account_id, owner_id, company_id, is_payable_bank_account, is_receivable_bank_account in cursor.fetchall(): + query2 = 'select id from "party_party-bank_account-company" where party = %s and company = %s' % (owner_id, company_id) + cursor.execute(query2) + + has_id = None + for row in cursor.fetchall(): + has_id = row[0] + + if has_id: + if is_payable_bank_account: + query = 'update "party_party-bank_account-company" set payable_bank_account = %s where id = %s' % (account_id, has_id); + cursor.execute(query) + if is_receivable_bank_account: + query = 'update "party_party-bank_account-company" set receivable_bank_account = %s where id = %s' % (account_id, has_id); + cursor.execute(query) + else: + query = 'insert into "party_party-bank_account-company" (party, company, payable_bank_account, receivable_bank_account) values (%s, %s, %s, %s)' % (owner_id, company_id, account_id if is_payable_bank_account else 'null', account_id if is_receivable_bank_account else 'null') + cursor.execute(query) + + Transaction().commit() diff --git a/before/issue11198-bank-uniqueness.py b/before/issue11198-bank-uniqueness.py index c9a7b11..4a8ff55 100755 --- a/before/issue11198-bank-uniqueness.py +++ b/before/issue11198-bank-uniqueness.py @@ -42,6 +42,32 @@ with Transaction().start(dbname, 1, context=context): BankNumber = pool.get('bank.account.number') cursor = Transaction().connection.cursor() + + # 1. drop _sql_constraints + # 2. rename account2 to account in case before upgrade rename columns + # 3. rename number_compact2 to number_compact in case before upgrade rename columns + # 4. remove duplicated iban codes + query = "ALTER TABLE bank_account_number DROP CONSTRAINT IF EXISTS bank_account_number_number_iban_exclude" + cursor.execute(query) + query = "ALTER TABLE bank_account_number DROP CONSTRAINT IF EXISTS bank_account_number_account_iban_exclude" + cursor.execute(query) + + query = "SELECT 1 FROM information_schema.columns WHERE table_name='bank_account_number' and column_name='number_compact2'" + cursor.execute(query) + if cursor.fetchone(): + query = "alter table bank_account_number drop column number_compact" + cursor.execute(query) + query = "alter table bank_account_number rename number_compact2 to number_compact" + cursor.execute(query) + + query = "SELECT 1 FROM information_schema.columns WHERE table_name='bank_account_number' and column_name='account2'" + cursor.execute(query) + if cursor.fetchone(): + query = "alter table bank_account_number drop column account" + cursor.execute(query) + query = "alter table bank_account_number rename account2 to account" + cursor.execute(query) + query = "select number_compact, count(*) from bank_account_number where type = 'iban' group by number_compact HAVING count(*) > 1" cursor.execute(query) diff --git a/config.yml b/config.yml index 8f96c7d..146c211 100644 --- a/config.yml +++ b/config.yml @@ -686,6 +686,13 @@ before: query: delete from ir_translation where name = 'account.configuration,default_product_account_expense' and lang in ('ca', 'es'); delete from ir_translation where name = 'account.configuration,default_product_account_revenue' and lang in ('ca', 'es'); + - comment: company_bank with MultiValue - 072070 + version: 6.4 + tables: party_party-company_company + query: ALTER TABLE "party_party-company_company" RENAME TO "party_party-bank_account-company";ALTER TABLE "party_party-company_company_id_seq" RENAME TO "party_party-bank_account-company_id_seq"; + ALTER TABLE "party_party-bank_account-company" RENAME COLUMN receivable_bank_account TO receivable_company_bank_account; + ALTER TABLE "party_party-bank_account-company" RENAME COLUMN payable_bank_account TO payable_company_bank_account; + - comment: Migration incoterm nantic to core version: 6.4 tables: incoterm @@ -1024,5 +1031,10 @@ after: version: 6.4 query: delete from ir_export_line where name = 'currency_digits'; + - comment: company_bank with MultiValue - 072070 + version: 6.4 + tables: bank_account-party_party + script: ./upgrades/before/072070-bank-account.py + ignore: - WARNING trytond.backend.postgresql.table Unable to set column move_line of table analytic_account_line not null !