diff --git a/easy_my_coop/__manifest__.py b/easy_my_coop/__manifest__.py
index 6964feb..aed426e 100644
--- a/easy_my_coop/__manifest__.py
+++ b/easy_my_coop/__manifest__.py
@@ -4,25 +4,25 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
- "name": "Easy My Coop",
- "version": "12.0.2.0.2",
- "depends": [
- "base",
- "web",
- "sale",
- "account",
- "base_iban",
- "product",
- "partner_firstname",
- "partner_contact_birthdate",
- "partner_contact_address",
- "email_template_config",
+ 'name': 'Easy My Coop',
+ 'version': '12.0.2.0.2',
+ 'depends': [
+ 'base',
+ 'web',
+ 'sale',
+ 'account',
+ 'base_iban',
+ 'product',
+ 'partner_firstname',
+ 'partner_contact_birthdate',
+ 'partner_contact_address',
+ 'email_template_config',
],
- "author": "Coop IT Easy SCRLfs",
- "category": "Cooperative management",
- "website": "https://www.coopiteasy.be",
- "license": "AGPL-3",
- "description": """
+ 'author': 'Coop IT Easy SCRLfs',
+ 'category': 'Cooperative management',
+ 'website': 'https://www.coopiteasy.be',
+ 'license': 'AGPL-3',
+ 'description': """
This module allows to manage the cooperator subscription and all the
cooperative business processes.
""",
@@ -51,6 +51,9 @@
'report/cooperator_register_G001.xml',
'data/mail_template_data.xml', # Must be loaded after reports
],
+ 'demo': [
+ 'demo/coop.xml',
+ ],
'installable': True,
'application': True,
}
diff --git a/easy_my_coop/demo/coop.xml b/easy_my_coop/demo/coop.xml
new file mode 100644
index 0000000..5897486
--- /dev/null
+++ b/easy_my_coop/demo/coop.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+ Virginie Leloup
+
+
+ virginie@demo.net
+ Avenue des Dessus-de-Livres, 2
+ Namur (Loyers)
+ 5101
+
+
+
+
+ Houssine Intégrale
+
+
+ houssine@demo.net
+ Avenue des Dessous-de-Livres, 3
+ Namur (Loyers)
+ 5101
+
+
+
+
+ Vincent Bixolon
+
+
+ vincent@demo.net
+ Rue de la colocation, 23
+ Namur (Loyers)
+ 5101
+
+
+
+
+ Rémy Commit
+
+
+ remy@demo.net
+ Rue Guido Van Rossum, 2
+ Evere
+ 5101
+
+
+
+
+ 416000
+ Cooperators
+
+
+
+
+
+ Part A - Founder
+ Part A
+
+
+
+ 2
+
+
+ 50
+
+
+
+
+
+
+
+
+ Part B - Worker
+ Part B
+
+
+
+ 2
+
+
+ 25
+
+
+
+
+
+
+
+
+ Manuel Dublues
+ manuel@demo.net
+ schaerbeekstraat
+ 1111
+ Brussels
+
+
+ manual
+ 3
+
+ en_US
+
+
+
+
+ 2
+ 50
+
+
+
+
+
+
+ 4
+ 50
+
+
+
+
diff --git a/easy_my_coop/models/account_invoice.py b/easy_my_coop/models/account_invoice.py
index 08c8dad..f3731fd 100644
--- a/easy_my_coop/models/account_invoice.py
+++ b/easy_my_coop/models/account_invoice.py
@@ -1,3 +1,9 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Houssine Bakkali
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+
from datetime import datetime
from odoo import api, fields, models
diff --git a/easy_my_coop/models/account_journal.py b/easy_my_coop/models/account_journal.py
index 32c0104..9ec7ae1 100644
--- a/easy_my_coop/models/account_journal.py
+++ b/easy_my_coop/models/account_journal.py
@@ -1,3 +1,9 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Houssine Bakkali
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+
from odoo import fields, models
diff --git a/easy_my_coop/models/company.py b/easy_my_coop/models/company.py
index 81cc9fc..86572aa 100644
--- a/easy_my_coop/models/company.py
+++ b/easy_my_coop/models/company.py
@@ -1,3 +1,9 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Houssine Bakkali
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+
from odoo import api, fields, models
diff --git a/easy_my_coop/models/coop.py b/easy_my_coop/models/coop.py
index 8e0c4a1..e3c8c36 100644
--- a/easy_my_coop/models/coop.py
+++ b/easy_my_coop/models/coop.py
@@ -1,3 +1,9 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Houssine Bakkali
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+
from datetime import datetime
from odoo import api, fields, models, _
@@ -404,7 +410,13 @@ class SubscriptionRequest(models.Model):
if self.company_id.property_cooperator_account:
account = self.company_id.property_cooperator_account
else:
- account = account_obj.search([('code', '=', '416000')])[0]
+ accounts = account_obj.search([('code', '=', '416000')])
+ if accounts:
+ account = accounts[0]
+ else:
+ raise UserError(_(
+ 'You must set a cooperator account on you company.'
+ ))
return account
def get_invoice_vals(self, partner):
@@ -445,7 +457,6 @@ class SubscriptionRequest(models.Model):
'city': self.city, 'email': self.company_email,
'out_inv_comm_type': 'bba',
'customer': self.share_product_id.customer,
- 'out_inv_comm_algorithm': 'random',
'country_id': self.country_id.id,
'lang': self.lang,
'data_policy_approved': self.data_policy_approved,
@@ -459,8 +470,6 @@ class SubscriptionRequest(models.Model):
'zip': self.zip_code, 'email': self.email,
'gender': self.gender, 'cooperator': True,
'city': self.city, 'phone': self.phone,
- 'out_inv_comm_type': 'bba',
- 'out_inv_comm_algorithm': 'random',
'country_id': self.country_id.id, 'lang': self.lang,
'birthdate_date': self.birthdate,
'customer': self.share_product_id.customer,
@@ -469,6 +478,29 @@ class SubscriptionRequest(models.Model):
}
return partner_vals
+ def get_representative_vals(self):
+ contact_vals = {
+ 'name': self.name,
+ 'firstname': self.firstname,
+ 'lastname': self.lastname, 'customer': False,
+ 'is_company': False, 'cooperator': True,
+ 'street': self.address, 'gender': self.gender,
+ 'zip': self.zip_code, 'city': self.city,
+ 'phone': self.phone, 'email': self.email,
+ 'country_id': self.country_id.id,
+ 'out_inv_comm_type': 'bba',
+ 'out_inv_comm_algorithm': 'random',
+ 'lang': self.lang,
+ 'birthdate_date': self.birthdate,
+ 'parent_id': self.partner.id,
+ 'representative': True,
+ 'function': self.contact_person_function,
+ 'type': 'representative',
+ 'data_policy_approved': self.data_policy_approved,
+ 'internal_rules_approved': self.internal_rules_approved
+ }
+ return contact_vals
+
def create_coop_partner(self):
partner_obj = self.env['res.partner']
@@ -526,27 +558,8 @@ class SubscriptionRequest(models.Model):
if contact:
contact.type = 'representative'
if not contact:
- contact_vals = {
- 'name': self.name,
- 'firstname': self.firstname,
- 'lastname': self.lastname, 'customer': False,
- 'is_company': False, 'cooperator': True,
- 'street': self.address, 'gender': self.gender,
- 'zip': self.zip_code, 'city': self.city,
- 'phone': self.phone, 'email': self.email,
- 'country_id': self.country_id.id,
- 'out_inv_comm_type': 'bba',
- 'out_inv_comm_algorithm': 'random',
- 'lang': self.lang,
- 'birthdate_date': self.birthdate,
- 'parent_id': partner.id,
- 'representative': True,
- 'function': self.contact_person_function,
- 'type': 'representative',
- 'data_policy_approved': self.data_policy_approved,
- 'internal_rules_approved': self.internal_rules_approved
- }
- contact = partner_obj.create(contact_vals)
+ contact_vals = self.get_representative_vals()
+ partner_obj.create(contact_vals)
else:
if len(contact) > 1:
raise UserError(_('There is two different persons with the'
diff --git a/easy_my_coop/models/operation_request.py b/easy_my_coop/models/operation_request.py
index cadaffe..f4b5ded 100644
--- a/easy_my_coop/models/operation_request.py
+++ b/easy_my_coop/models/operation_request.py
@@ -1,4 +1,9 @@
# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Houssine Bakkali
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+
from datetime import datetime
from odoo import api, fields, models, _
@@ -10,6 +15,7 @@ class operation_request(models.Model):
_description = "Operation request"
def get_date_now(self):
+ # fixme odoo 12 uses date types
return datetime.strftime(datetime.now(), '%Y-%m-%d')
@api.multi
diff --git a/easy_my_coop/models/partner.py b/easy_my_coop/models/partner.py
index 85ba9f3..0b40220 100644
--- a/easy_my_coop/models/partner.py
+++ b/easy_my_coop/models/partner.py
@@ -1,3 +1,9 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Houssine Bakkali
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+
from odoo import api, fields, models
@@ -87,7 +93,7 @@ class ResPartner(models.Model):
cooperator = fields.Boolean(string='Cooperator',
help="Check this box if this contact is a"
- " cooperator(effective or not).")
+ " cooperator (effective or not).")
member = fields.Boolean(string='Effective cooperator',
help="Check this box if this cooperator"
" is an effective member.")
@@ -98,6 +104,7 @@ class ResPartner(models.Model):
old_member = fields.Boolean(string='Old cooperator',
help="Check this box if this cooperator is"
" no more an effective member.")
+ # todo use oca partner_contact_gender
gender = fields.Selection([('male', 'Male'),
('female', 'Female'),
('other', 'Other')],
diff --git a/easy_my_coop/models/product.py b/easy_my_coop/models/product.py
index 5ca3ed6..0706a1d 100644
--- a/easy_my_coop/models/product.py
+++ b/easy_my_coop/models/product.py
@@ -1,3 +1,9 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Houssine Bakkali
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+
from odoo import api, fields, models
diff --git a/easy_my_coop/models/res_partner_bank.py b/easy_my_coop/models/res_partner_bank.py
index 1a3aa98..53e2bb5 100644
--- a/easy_my_coop/models/res_partner_bank.py
+++ b/easy_my_coop/models/res_partner_bank.py
@@ -1,3 +1,9 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Houssine Bakkali
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+
from odoo import models
diff --git a/easy_my_coop/tests/__init__.py b/easy_my_coop/tests/__init__.py
new file mode 100644
index 0000000..d83361d
--- /dev/null
+++ b/easy_my_coop/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_coop
diff --git a/easy_my_coop/tests/test_coop.py b/easy_my_coop/tests/test_coop.py
new file mode 100644
index 0000000..a312885
--- /dev/null
+++ b/easy_my_coop/tests/test_coop.py
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Coop IT Easy SCRL fs
+# Robin Keunen
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+import odoo.tests.common as common
+from odoo.fields import Date
+
+
+class TestCoop(common.TransactionCase):
+ def setUp(self):
+ super(TestCoop, self).setUp()
+
+ self.request = self.browse_ref(
+ "easy_my_coop.subscription_request_1_demo"
+ )
+ self.bank_journal_euro = self.env["account.journal"].create(
+ {"name": "Bank", "type": "bank", "code": "BNK67"}
+ )
+ self.payment_method_manual_in = self.env.ref(
+ "account.account_payment_method_manual_in"
+ )
+
+ def test_put_on_waiting_list(self):
+ self.request.put_on_waiting_list()
+ self.assertEquals(self.request.state, "waiting")
+
+ def test_validate_subscription_request(self):
+ self.request.validate_subscription_request()
+
+ self.assertEquals(self.request.state, "done")
+ self.assertTrue(self.request.partner_id)
+ self.assertTrue(self.request.partner_id.coop_candidate)
+ self.assertFalse(self.request.partner_id.member)
+ self.assertEquals(self.request.type, "new")
+ self.assertTrue(len(self.request.capital_release_request) >= 1)
+ self.assertEquals(self.request.capital_release_request.state, "open")
+ self.assertTrue(self.request.capital_release_request.sent)
+
+ def test_register_payment_for_capital_release(self):
+ self.request.validate_subscription_request()
+ invoice = self.request.capital_release_request
+
+ ctx = {"active_model": "account.invoice", "active_ids": [invoice.id]}
+ register_payments = (
+ self.env["account.register.payments"]
+ .with_context(ctx)
+ .create(
+ {
+ "payment_date": Date.today(),
+ "journal_id": self.bank_journal_euro.id,
+ "payment_method_id": self.payment_method_manual_in.id,
+ }
+ )
+ )
+ register_payments.create_payments()
+ self.assertEquals(self.request.capital_release_request.state, "paid")
+
+ partner = self.request.partner_id
+ self.assertFalse(partner.coop_candidate)
+ self.assertTrue(partner.member)
+ self.assertTrue(partner.share_ids)
+ self.assertEquals(self.request.partner_id.effective_date, Date.today())
+
+ share = partner.share_ids[0]
+ self.assertEquals(share.share_number, self.request.ordered_parts)
+ self.assertEquals(
+ share.share_product_id, self.request.share_product_id
+ )
+ self.assertEquals(share.effective_date, Date.today())
diff --git a/easy_my_coop_be/models/coop.py b/easy_my_coop_be/models/coop.py
index ad9108b..f2be562 100644
--- a/easy_my_coop_be/models/coop.py
+++ b/easy_my_coop_be/models/coop.py
@@ -8,3 +8,20 @@ class SubscriptionRequest(models.Model):
('asbl', 'ASBL'),
('sprl', 'SPRL'),
('sa', 'SA')])
+
+ def get_partner_company_vals(self):
+ vals = super(SubscriptionRequest).get_partner_company_vals()
+ vals['out_inv_comm_algorithm'] = 'random'
+ return vals
+
+ def get_partner_vals(self):
+ vals = super(SubscriptionRequest).get_partner_vals()
+ vals['out_inv_comm_type'] = 'bba'
+ vals['out_inv_comm_algorithm'] = 'random'
+ return vals
+
+ def get_representative_valst(self):
+ vals = super(SubscriptionRequest).get_representative_vals()
+ vals['out_inv_comm_type'] = 'bba'
+ vals['out_inv_comm_algorithm'] = 'random'
+ return vals