diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py index 6c013c35e181643e1e4bef4e9662e2c306299124..b5728bfa60eccc9041af41bdcdac1133e41d149c 100644 --- a/inventory_provider/db/ims_data.py +++ b/inventory_provider/db/ims_data.py @@ -106,3 +106,126 @@ def lookup_pop_info(ds, hostname): } } return eq + + +def otrs_get_customer_company_rows(ds): + yield ['customer_id', 'name', 'street', 'zip', 'city', 'country', 'url', + 'comments'] + all_cus_comps = set() + for customer in ds.get_all_entities('Customer'): + all_cus_comps.add(customer['Name']) + yield [customer['Name'].replace(' ', ''), customer['Name'], + '', '', '', '', '', ''] + for vendor in ds.get_all_entities('Vendor'): + if vendor['Name'] not in all_cus_comps: + all_cus_comps.add(vendor['Name']) + yield [vendor['Name'].replace(' ', ''), vendor['Name'], + '', '', '', '', '', ''] + + +# TODO - check the rules for validation once model has been confirmed +def _is_valid_customer(cus): + if not cus['email']: + return False + return True + + +def otrs_get_customer_contacts(ds): + + def _get_customer_id2(t): + if t['Id'] == 3 or t['Name'] == 'EU NREN': + return 'OTRS-GEANT-NREN' + return '' + + for customer in ds.get_all_entities( + 'Customer', + [ + ims.CUSTOMER_PROPERTIES['CustomerRelatedContacts'], + ims.CUSTOMER_PROPERTIES['CustomerType'] + ]): + + if customer['CustomerRelatedContacts']: + + for contact in customer['CustomerRelatedContacts']: + t_customer_user = OrderedDict({ + 'email': contact['Contact']['Mail'], + 'username': contact['Contact']['Mail'], # TODO if tal_id is going to be present use that # noqa + 'customer_id': customer['Name'].replace(' ', ''), + 'customer_id_2': + _get_customer_id2(customer['CustomerType']), + 'title': '', + 'firstname': contact['Contact']['Name'], + 'lastname': + ' '.join(filter(None, [ + contact['Contact']['InFix'], + contact['Contact']['LastName'] + ])), + 'phone': '', + 'fax': '', + 'mobile': '', + 'street': '', + 'zip': '', + 'city': '', + 'country': '', + 'comments': '', + }) + if not _is_valid_customer(t_customer_user): + continue + if contact['Contact']['IsGroup']: + t_customer_user['comments'] = \ + 'Organisation imported as a user' + + yield t_customer_user + + +def otrs_get_vendor_contacts(ds): + + for vrc in ds.get_all_entities( + 'VendorRelatedContact', + [ + ims.VENDOR_RELATED_CONTACT_PROPERTIES['Vendor'], + ims.VENDOR_RELATED_CONTACT_PROPERTIES['Contact'] + ]): + t_customer_user = OrderedDict({ + 'email': vrc['Contact']['Mail'], + 'username': vrc['Contact']['Mail'], # TODO if tal_id is going to be present use that # noqa + 'customer_id': vrc['Vendor']['Name'].replace(' ', ''), + 'customer_id_2': '', + 'title': '', + 'firstname': vrc['Contact']['Name'], + 'lastname': + ' '.join(filter(None, [ + vrc['Contact']['InFix'], + vrc['Contact']['LastName'] + ])), + 'phone': '', + 'fax': '', + 'mobile': '', + 'street': '', + 'zip': '', + 'city': '', + 'country': '', + 'comments': '', + }) + if not _is_valid_customer(t_customer_user): + continue + if vrc['Contact']['IsGroup']: + t_customer_user['comments'] = \ + 'Organisation imported as a user' + + yield t_customer_user + + +def otrs_get_customer_users_rows(ds): + yield ['email', 'username', 'customer_id', 'customer_id_2', 'title', + 'firstname', 'lastname', 'phone', 'fax', 'mobile', 'street', 'zip', + 'city', 'country', 'comments'] + + def get_all_cus_user_rows(): + yield from otrs_get_customer_contacts(ds) + yield from otrs_get_vendor_contacts(ds) + + sorted_cus = sorted(get_all_cus_user_rows(), key=lambda x: x['email']) + # this will be used to prioritisation + for cu in sorted_cus: + yield list(cu.values())