Browse Source

[ADD] Add passport and passport_partner modules: You can manage several passports for each contact.

pull/2/head
unknown 10 years ago
committed by Yannick Vaucher
parent
commit
46e64dcea8
  1. 24
      passport/__init__.py
  2. 50
      passport/__openerp__.py
  3. 126
      passport/i18n/fr.po
  4. 125
      passport/i18n/passport.pot
  5. 31
      passport/res_partner.py
  6. 17
      passport/res_partner_view.xml
  7. 58
      passport/res_passport.py
  8. 46
      passport/res_passport_view.xml
  9. 2
      passport/security/ir.model.access.csv
  10. 27
      passport/tests/__init__.py
  11. 164
      passport/tests/test_passport.py

24
passport/__init__.py

@ -0,0 +1,24 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2013-2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import res_passport
from . import res_partner

50
passport/__openerp__.py

@ -0,0 +1,50 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2013-2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Passport Management',
'version': '0.1',
'author': 'Savoir-faire Linux',
'maintainer': 'Savoir-faire Linux',
'website': 'http://www.savoirfairelinux.com',
'license': 'AGPL-3',
'category': 'Customer Relationship Management',
'description': """
Passport Management
===================
Contributors
------------
* El Hadji Dem (elhadji.dem@savoirfairelinux.com)
* Sandy Carter (sandy.carter@savoirfairelinux.com)
""",
'depends': [],
'external_dependencies': {},
'data': [
'res_passport_view.xml',
"res_partner_view.xml",
'security/ir.model.access.csv',
],
'demo': [],
'test': [],
'installable': True,
}

126
passport/i18n/fr.po

@ -0,0 +1,126 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * passport
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-02-24 23:40+0000\n"
"PO-Revision-Date: 2014-02-24 18:47-0500\n"
"Last-Translator: Sandy Carter <sandy.carter@savoirfairelinux.com>\n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: \n"
"X-Generator: Poedit 1.6.4\n"
#. module: passport
#: help:res.passport,country_id:0
msgid "Country of deliverance."
msgstr "Pays émetteur."
#. module: passport
#: help:res.passport,birth_date:0
msgid "Date of birth on passport."
msgstr "Date de naissance sur le passeport."
#. module: passport
#: help:res.passport,gender:0
msgid "Gender."
msgstr "Sexe."
#. module: passport
#: model:ir.actions.act_window,name:passport.action_passport_tree_list
#: model:ir.model,name:passport.model_res_passport view:res.partner:0
#: field:res.partner,passport_ids:0
msgid "Passport"
msgstr "Passeport"
#. module: passport
#: field:res.passport,country_id:0
msgid "Delivery country"
msgstr "Pays de délivrance"
#. module: passport
#: field:res.passport,name:0
msgid "Owner name"
msgstr "Nom du propriétaire"
#. module: passport
#: field:res.passport,gender:0
msgid "Gender"
msgstr "Sexe"
#. module: passport
#: field:res.passport,number:0
msgid "Passport No"
msgstr "No du passeport"
#. module: passport
#: help:res.passport,expiration_date:0
msgid "Expiration date of passport."
msgstr "Date d'expiration sur le passeport."
#. module: passport
#: view:res.passport:0
msgid "PassportTree"
msgstr "PassportTree"
#. module: passport
#: code:addons/passport/res_partner.py:39
#, python-format
msgid "New Passport"
msgstr "Nouveau passeport"
#. module: passport
#: view:res.passport:0
msgid "PassportForm"
msgstr "PassportForm"
#. module: passport
#: field:res.passport,partner_id:0
msgid "Contact"
msgstr "Contact"
#. module: passport
#: help:res.passport,number:0
msgid "Passport number."
msgstr "Numéro du passeport."
#. module: passport
#: selection:res.passport,gender:0
msgid "Female"
msgstr "Femme"
#. module: passport
#: help:res.passport,name:0
msgid "Owner name (As printed into the passport)."
msgstr "Nom du propriétaire (Comme écrit sur le passeport)."
#. module: passport
#: model:ir.model,name:passport.model_res_partner
msgid "Partner"
msgstr "Organisme"
#. module: passport
#: selection:res.passport,gender:0
msgid "Male"
msgstr "Homme"
#. module: passport
#: view:res.passport:0
msgid "Owner name (As printed into the passport)"
msgstr "Nom du propriétaire (Comme écrit sur le passeport)"
#. module: passport
#: field:res.passport,expiration_date:0
msgid "Expiration date"
msgstr "Date d'expiration"
#. module: passport
#: field:res.passport,birth_date:0
msgid "Birth Date"
msgstr "Date de naissance"

125
passport/i18n/passport.pot

@ -0,0 +1,125 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * passport
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-02-24 23:40+0000\n"
"PO-Revision-Date: 2014-02-24 23:40+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: passport
#: help:res.passport,country_id:0
msgid "Country of deliverance."
msgstr ""
#. module: passport
#: help:res.passport,birth_date:0
msgid "Date of birth on passport."
msgstr ""
#. module: passport
#: help:res.passport,gender:0
msgid "Gender."
msgstr ""
#. module: passport
#: model:ir.actions.act_window,name:passport.action_passport_tree_list
#: model:ir.model,name:passport.model_res_passport
#: view:res.partner:0
#: field:res.partner,passport_ids:0
msgid "Passport"
msgstr ""
#. module: passport
#: field:res.passport,country_id:0
msgid "Delivery country"
msgstr ""
#. module: passport
#: field:res.passport,name:0
msgid "Owner name"
msgstr ""
#. module: passport
#: field:res.passport,gender:0
msgid "Gender"
msgstr ""
#. module: passport
#: field:res.passport,number:0
msgid "Passport No"
msgstr ""
#. module: passport
#: help:res.passport,expiration_date:0
msgid "Expiration date of passport."
msgstr ""
#. module: passport
#: view:res.passport:0
msgid "PassportTree"
msgstr ""
#. module: passport
#: code:addons/passport/res_partner.py:39
#, python-format
msgid "New Passport"
msgstr ""
#. module: passport
#: view:res.passport:0
msgid "PassportForm"
msgstr ""
#. module: passport
#: field:res.passport,partner_id:0
msgid "Contact"
msgstr ""
#. module: passport
#: help:res.passport,number:0
msgid "Passport number."
msgstr ""
#. module: passport
#: selection:res.passport,gender:0
msgid "Female"
msgstr ""
#. module: passport
#: help:res.passport,name:0
msgid "Owner name (As printed into the passport)."
msgstr ""
#. module: passport
#: model:ir.model,name:passport.model_res_partner
msgid "Partner"
msgstr ""
#. module: passport
#: selection:res.passport,gender:0
msgid "Male"
msgstr ""
#. module: passport
#: view:res.passport:0
msgid "Owner name (As printed into the passport)"
msgstr ""
#. module: passport
#: field:res.passport,expiration_date:0
msgid "Expiration date"
msgstr ""
#. module: passport
#: field:res.passport,birth_date:0
msgid "Birth Date"
msgstr ""

31
passport/res_partner.py

@ -0,0 +1,31 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2013-2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm, fields
class res_partner(orm.Model):
_inherit = 'res.partner'
_columns = {
'passport_ids': fields.one2many(
'res.passport', 'partner_id', 'Passport'),
}

17
passport/res_partner_view.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_partner_form" model="ir.ui.view">
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Passport" attrs="{'invisible': [('is_company','=',True)]}">
<field name="passport_ids" nolabel="1"/>
</page>
</notebook>
</field>
</record>
</data>
</openerp>

58
passport/res_passport.py

@ -0,0 +1,58 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2013-2014 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import fields, orm
class res_passport(orm.Model):
_description = 'Passport'
_name = 'res.passport'
_columns = {
'name': fields.char(
'Owner name', help='Owner name (As printed into the passport).'),
'number': fields.char(
'Passport No', size=50, help='Passport number.'),
'country_id': fields.many2one(
'res.country', 'Delivery country', help="Country of deliverance."),
'expiration_date': fields.date(
'Expiration date', help="Expiration date of passport."),
'birth_date': fields.date('Birth Date',
help="Date of birth on passport."),
'gender': fields.selection(
[('male', 'Male'),
('female', 'Female')],
'Gender', help="Gender."),
'partner_id': fields.many2one('res.partner', 'Contact'),
}
def name_get(self, cr, uid, ids, context=None):
if type(ids) in (int, long):
ids = [ids]
res = []
for res_passport in self.browse(cr, uid, ids, context=context):
name_elements = []
if res_passport.country_id and res_passport.country_id.name:
name_elements.append(res_passport.country_id.name)
if res_passport.name:
name_elements.append(res_passport.name)
res.append((res_passport.id, ' | '.join(name_elements)))
return res

46
passport/res_passport_view.xml

@ -0,0 +1,46 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!-- Tree Views passport-->
<record model="ir.ui.view" id="passport_tree_view">
<field name="name">Passport Tree View</field>
<field name="model">res.passport</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="PassportTree" version="7.0">
<field name="country_id"/>
<field name="number"/>
<field name="expiration_date"/>
<field name="name"/>
</tree>
</field>
</record>
<!-- Form Views passport-->
<record model="ir.ui.view" id="passport_form_view">
<field name="name">Passport Form View</field>
<field name="model">res.passport</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="PassportForm" version="7.0" >
<group col="4">
<field name="country_id"/>
<field name="name" string="Owner name (As printed into the passport)"/>
<field name="number"/>
<field name="gender"/>
<field name="expiration_date"/>
<field name="birth_date"/>
</group>
</form>
</field>
</record>
<!-- Actions -->
<record model="ir.actions.act_window" id="action_passport_tree_list">
<field name="name">Passport</field>
<field name="view_id" ref="passport_tree_view"/>
<field name="res_model">res.passport</field>
<field name="view_mode">tree,form</field>
</record>
</data>
</openerp>

2
passport/security/ir.model.access.csv

@ -0,0 +1,2 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_res_passport","res_passport_user","model_res_passport","base.group_user",1,1,1,1

27
passport/tests/__init__.py

@ -0,0 +1,27 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2013 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import test_passport
checks = [
test_passport,
]

164
passport/tests/test_passport.py

@ -0,0 +1,164 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2013 Savoir-faire Linux
# (<http://www.savoirfairelinux.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.tests.common import TransactionCase
from openerp.osv.orm import browse_record
from datetime import date
class Base_Test_passport(TransactionCase):
"""
Simple test creating a passport
This is a base class for passport test cases.
Inherit from this and setup values.
"""
def setUp(self, vals={}):
"""
Setting up passport.
"""
# Default test values
self.vals = {'name': 'This is a test passport name',
'number': 'A200124789',
'country_id': 1,
'expiration_date': date(2013, 11, 14),
'birth_date': date(1980, 11, 21),
'gender': 'male',
}
super(Base_Test_passport, self).setUp()
# Overwrite vals if needed
self.vals = dict(self.vals.items() + vals.items())
# Create the passport object; we will be testing this, so store in self
res_passport = self.registry('res.passport')
self.passport_id = res_passport.create(self.cr, self.uid, self.vals, context=None)
def test_passport(self):
"""
Checking the passport creation.
"""
res_passport = self.registry('res.passport')
passport_obj = res_passport.browse(self.cr, self.uid, self.passport_id, context=None)
for field in self.vals:
val = passport_obj[field]
if type(val) == browse_record:
self.assertEquals(self.vals[field], val.id,
"IDs for %s don't match: (%i != %i)" %
(field, self.vals[field], val.id))
else:
self.assertEquals(str(self.vals[field]), str(val),
"Values for %s don't match: (%s != %s)" %
(field, str(self.vals[field]), str(val)))
class Test_passport_bad(Base_Test_passport):
"""
Simple test creating a passport, test against bad values
"""
def setUp(self):
"""
Setting up passport, then changing the values to test against.
"""
super(Test_passport_bad, self).setUp()
# Change vals to something wrong
self.vals = {
'name': 'This is the wrong passport name',
'number': 'A111111111',
'country_id': 0,
'expiration_date': date(1999, 11, 14),
'birth_date': date(1999, 11, 21),
'gender': '',
}
def test_passport(self):
"""
Checking the passport creation, assertions should all be false.
"""
res_passport = self.registry('res.passport')
passport_obj = res_passport.browse(self.cr, self.uid, self.passport_id, context=None)
for field in self.vals:
val = passport_obj[field]
if type(val) == browse_record:
self.assertNotEqual(self.vals[field], val.id,
"IDs for %s don't match: (%i != %i)" %
(field, self.vals[field], val.id))
else:
self.assertNotEqual(str(self.vals[field]), str(val),
"Values for %s don't match: (%s != %s)" %
(field, str(self.vals[field]), str(val)))
class Test_passport_name_get(TransactionCase):
"""
Test name_get
"""
def setUp(self):
"""
Setting up passport with name, country, either and none.
"""
super(Test_passport_name_get, self).setUp()
res_passport = self.registry('res.passport')
res_country = self.registry('res.country')
country = res_country.browse(self.cr, self.uid, 1, context=None)
self.name_on_passport = 'test name'
self.country_name = country.name_get()[0][1]
self.both = res_passport.create(
self.cr, self.uid, {'name': self.name_on_passport,
'country_id': country.id, },
context=None)
self.name_only = res_passport.create(
self.cr, self.uid, {'name': self.name_on_passport, },
context=None)
self.country_only = res_passport.create(
self.cr, self.uid, {'country_id': country.id, },
context=None)
self.neither = res_passport.create(
self.cr, self.uid, {},
context=None)
def test_passport(self):
"""
Checking the passport creation, assertions should all be false.
"""
res_passport = self.registry('res.passport')
both_obj = res_passport.browse(self.cr, self.uid, self.both, context=None)
name_only = res_passport.browse(self.cr, self.uid, self.name_only, context=None)
country_only = res_passport.browse(self.cr, self.uid, self.country_only, context=None)
neither = res_passport.browse(self.cr, self.uid, self.neither, context=None)
self.assertEquals(
both_obj.name_get()[0][1],
' | '.join((self.country_name, self.name_on_passport)),
'Error in passport name_get() with both country name and name on '
'passport.'
)
self.assertEquals(
name_only.name_get()[0][1], self.name_on_passport,
'Error in passport name_get() with only name on passport.'
)
self.assertEquals(
country_only.name_get()[0][1], self.country_name,
'Error in passport name_get() with only name of country.'
)
self.assertEquals(
neither.name_get()[0][1], '',
'Error in passport name_get() with neither country name nor name '
'on passport.'
)
Loading…
Cancel
Save