diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py index 1c32397900e97d227cc5b80072c9c7d99b3248f8..9ace88d97ab3b151b2d6203f0a518a9303f24827 100644 --- a/inventory_provider/db/ims_data.py +++ b/inventory_provider/db/ims_data.py @@ -1,7 +1,8 @@ import re +from collections import OrderedDict from inventory_provider.db import ims -from inventory_provider.db.ims import IMS, InventoryStatus +from inventory_provider.db.ims import IMS, InventoryStatus, RelateType INTERNAL_POP_NAMES = { 'Cambridge OC', @@ -111,6 +112,90 @@ def get_interface_info(ds): yield from ds.get_all_entities('Port') +def otrs_get_customer_company_rows(ds): + yield ['customer_id', 'name', 'street', 'zip', 'city', 'country', 'url', + 'comments'] + for customer in ds.get_all_entities('Customer'): + yield [customer['Name'], customer['FullName'], '', '', '', '', '', ''] + + +def otrs_get_users_as_customers(ds): + yielded = False + type_priority = { + RelateType.SITE: 1, + RelateType.GROUP: 2, + RelateType.CONTRACT: 3, + RelateType.VENDOR: 4, + RelateType.CONTACT: 5, + RelateType.CUSTOMER: 6, + } + + def _choose_customer_user(cu_1, cu_2): + if not cu_2 or type_priority.get(cu_1['type'], 0) > type_priority.get( + cu_2['type'], 0): + return cu_1 + return cu_2 + + def _is_valid_customer(cus): + # if not cus['email']: + # return False + return True + + for customer in ds.get_all_entities( + 'Customer', + ims.CUSTOMER_PROPERTIES['CustomerRelatedContacts']): + if customer['CustomerRelatedContacts']: + + customer_user = None + for contact in customer['CustomerRelatedContacts']: + # could just do this as an array, but this makes it easier to + # keep track of the fields + t_customer_user = OrderedDict({ + 'type': ims.RelateType(contact['MainTypeId']), + 'email': contact['Contact']['Mail'], + 'username': contact['Contact']['Mail'], # TODO if tal_id is going to be present use that # noqa + 'customer_id': customer['Name'], + 'customer_id_2': '', # TODO populate - need the rules for this # noqa + 'title': contact['Contact']['PreFix'], # TODO - double check this is the right field # noqa + 'firstname': contact['Contact']['Name'], + 'lastname': contact['Contact']['LastName'], + 'phone': contact['Contact']['Phone'], + 'fax': contact['Contact']['Fax'], + 'mobile': contact['Contact']['Mobile'], + 'street': '', + 'zip': '', + 'city': '', + 'country': '', + 'comments': '' + }) + if not _is_valid_customer(t_customer_user): + continue + customer_user = _choose_customer_user( + t_customer_user, + customer_user + ) + if customer_user: + del customer_user['type'] + yield customer_user.values() + yielded = True + + # Is there a better way to do this? + if not yielded: + return [] + + +def otrs_get_orgs_as_customers(ds): + return [] + + +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'] + yield from otrs_get_users_as_customers(ds) + yield from otrs_get_orgs_as_customers(ds) + + if __name__ == '__main__': import sys username = sys.argv[1]