Base contact by function

* [ADD] added base_contact_function module: It allow to manage contacts by function"
* [ADD] Added base_contact_function_partner_firstname module: It allows to add firstname before name.Name is considered like the lastname and we have firstname and lastname on partner view and contact view."
The base_contact_function_partner_firstname module depends on partner_firstname and base_contact_function module.

Previous reviews:
---

@StefanRijnhart

> I have a hard time trying to find out what this module actually does. The manifest description is very terse. The name of the module reminds me of base_contact, which allowed multiple connections between the same person and a company. Is this module similar? The description should at least explain what 'institutions' are (a concept that this module introduces).
>
> Terminology is off at times, it seems. l.130: 'acronym': is this abbreviation, or maybe stick to the standard 'code' field name and label?
>
> Organism: I'm guessing you mean organization. But in any case, changing the 'company' terminology should be split off as a separate module.
>
> The translations seem to contain obsolete terms, e.g. l.241 and other occurrences of 'passport'.

@bwrsandman

> This is for cases where one partner (Mike Fletcher President of Agrolait) can be part of another company (Mike Fletcher VP of AsusTEK) in a different function.
>
> The module helps track these functions.
On 03/09/2014 13:52, Sandy wrote:
>
> In base_contact_function_partner_firstname/tests/test_partner.py:
>
> > +
> > +class test_partner_contact_id(TransactionCase):
> > +
> > +    def setUp(self):
> > +        super(test_partner_contact_id, self).setUp()
> > +        # Clean up registries
> > +        self.registry('ir.model').clear_caches()
> > +        self.registry('ir.model.data').clear_caches()
> > +        # Get registries
> > +        self.user_model = self.registry("res.users")
> > +        self.partner_model = self.registry("res.partner")
> > +        # Get context
> > +        self.context = self.user_model.context_get(self.cr, self.uid)
> > +        # Create values for test, contact also created
> > +        contact_id = self.partner_model.create(self.cr, self.uid, {
> > +            'name': 'Astérix',
>
> Why? This case catches more unicode errors.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/OCA/partner-contact/pull/20/files#r17043924>.
>
I won't fight over this. It's just a better practice IMO, always using
unicode strings where the API mandates unicode, rather than utf-8
encoded string objects. This makes your source code the same regardless
of the encoding declaration at the top of the file.

-- 
Alexandre Fayolle
Chef de Projet
Tel : + 33 (0)4 79 26 57 94

Camptocamp France SAS
Savoie Technolac, BP 352
73377 Le Bourget du Lac Cedex
http://www.camptocamp.com