"""Logic for Payment Hold.""" from owsresponse import response from abacus_account import models from abacus_account.schemas import AccountContractVatDetailSchema def create_or_update_account_contract_vat_detail(input_vat_details): """ Create or update account contract vat details. Params could be: [ { "account_id": 123, "contract_id": 312, "vat_country": "Germany", "is_vat_registered": false, "company_code": "SOMECODE", "is_vat_eligible": false }, { "account_id": 321, "contract_id": 123, "vat_country": "United Kingdom", "is_vat_registered": true, "company_code": "SOMECODE2", "is_vat_eligible": true } ] """ vat_details = [] for vat_detail in input_vat_details: existing_details = models.AccountContractVatDetail.\ get_by_account_id_contract_id( vat_detail.get('account_id'), vat_detail.get('contract_id')) if existing_details: existing_details.update_attributes(**vat_detail) vat_details.append(existing_details) else: created_vat_details = models.AccountContractVatDetail.build(**vat_detail) vat_details.append(created_vat_details) models.AccountContractVatDetail.commit_changes() return response.Response( message=AccountContractVatDetailSchema(many=True).dump(vat_details), status=201 )