Browse Source

[IMP] adding some validation and fix

Check that the cooperator doesn't mix share when it's not allowed and
that he doesn't subscribe for more than he can if he own already shares
pull/1/head
houssine 6 years ago
parent
commit
c3161526ea
  1. 51
      easy_my_coop/controllers/main.py

51
easy_my_coop/controllers/main.py

@ -33,11 +33,13 @@ class WebsiteSubscription(http.Controller):
type='http', auth="public", website=True) type='http', auth="public", website=True)
def display_become_cooperator_page(self, **kwargs): def display_become_cooperator_page(self, **kwargs):
values = {} values = {}
logged = False
if request.env.user.login != 'public': if request.env.user.login != 'public':
logged = True
partner = request.env.user.partner_id partner = request.env.user.partner_id
if partner.is_company: if partner.is_company:
return request.website.render("easy_my_coop.becomecompanycooperator", values) return request.website.render("easy_my_coop.becomecompanycooperator", values)
values = self.fill_values(values, False, True)
values = self.fill_values(values, False, logged, True)
for field in _COOP_FORM_FIELD: for field in _COOP_FORM_FIELD:
if kwargs.get(field): if kwargs.get(field):
@ -52,7 +54,10 @@ class WebsiteSubscription(http.Controller):
def display_become_company_cooperator_page(self, **kwargs): def display_become_company_cooperator_page(self, **kwargs):
values = {} values = {}
values = self.fill_values(values, True, True)
logged = False
if request.env.user.login != 'public':
logged = True
values = self.fill_values(values, True, logged, True)
for field in _COMPANY_FORM_FIELD: for field in _COMPANY_FORM_FIELD:
if kwargs.get(field): if kwargs.get(field):
@ -119,16 +124,17 @@ class WebsiteSubscription(http.Controller):
values['phone'] = partner.phone values['phone'] = partner.phone
return values return values
def fill_values(self, values, is_company, load_from_user=False):
def fill_values(self, values, is_company, logged, load_from_user=False):
sub_req_obj = request.env['subscription.request'] sub_req_obj = request.env['subscription.request']
company = request.website.company_id company = request.website.company_id
products = self.get_products_share(is_company) products = self.get_products_share(is_company)
if load_from_user: if load_from_user:
values = self.get_values_from_user(values, is_company) values = self.get_values_from_user(values, is_company)
if is_company: if is_company:
values['is_company'] = 'on' values['is_company'] = 'on'
if logged:
values['logged'] = 'on'
values['countries'] = self.get_countries() values['countries'] = self.get_countries()
values['langs'] = self.get_langs() values['langs'] = self.get_langs()
values['products'] = products values['products'] = products
@ -174,6 +180,11 @@ class WebsiteSubscription(http.Controller):
langs = request.env['res.lang'].sudo().search([]) langs = request.env['res.lang'].sudo().search([])
return langs return langs
def get_selected_share(self, kwargs):
prod_obj = request.env['product.template']
product_id = kwargs.get("share_product_id")
return prod_obj.sudo().browse(int(product_id)).product_variant_ids[0]
def validation(self, kwargs, logged, values, post_file): def validation(self, kwargs, logged, values, post_file):
user_obj = request.env['res.users'] user_obj = request.env['res.users']
sub_req_obj = request.env['subscription.request'] sub_req_obj = request.env['subscription.request']
@ -191,7 +202,7 @@ class WebsiteSubscription(http.Controller):
if ('g-recaptcha-response' not in kwargs if ('g-recaptcha-response' not in kwargs
or not request.website.is_captcha_valid( or not request.website.is_captcha_valid(
kwargs['g-recaptcha-response'])): kwargs['g-recaptcha-response'])):
values = self.fill_values(values, is_company)
values = self.fill_values(values, is_company, logged)
values["error_msg"] = _("the captcha has not been validated," values["error_msg"] = _("the captcha has not been validated,"
" please fill in the captcha") " please fill in the captcha")
@ -202,7 +213,7 @@ class WebsiteSubscription(http.Controller):
error = set(field for field in required_fields if not values.get(field)) #noqa error = set(field for field in required_fields if not values.get(field)) #noqa
if error: if error:
values = self.fill_values(values, is_company)
values = self.fill_values(values, is_company, logged)
values["error_msg"] = _("Some mandatory fields have not " values["error_msg"] = _("Some mandatory fields have not "
"been filled") "been filled")
values = dict(values, error=error, kwargs=kwargs.items()) values = dict(values, error=error, kwargs=kwargs.items())
@ -211,7 +222,7 @@ class WebsiteSubscription(http.Controller):
if not logged and email: if not logged and email:
user = user_obj.sudo().search([('login', '=', email)]) user = user_obj.sudo().search([('login', '=', email)])
if user: if user:
values = self.fill_values(values, is_company)
values = self.fill_values(values, is_company, logged)
values.update(kwargs) values.update(kwargs)
values["error_msg"] = _("There is an existing account for this" values["error_msg"] = _("There is an existing account for this"
" mail address. Please login before " " mail address. Please login before "
@ -222,7 +233,7 @@ class WebsiteSubscription(http.Controller):
company = request.website.company_id company = request.website.company_id
if company.allow_id_card_upload: if company.allow_id_card_upload:
if not post_file: if not post_file:
values = self.fill_values(values, is_company)
values = self.fill_values(values, is_company, logged)
values.update(kwargs) values.update(kwargs)
values["error_msg"] = _("You need to upload a" values["error_msg"] = _("You need to upload a"
" scan of your id card") " scan of your id card")
@ -232,7 +243,7 @@ class WebsiteSubscription(http.Controller):
valid = sub_req_obj.check_iban(iban) valid = sub_req_obj.check_iban(iban)
if not valid: if not valid:
values = self.fill_values(values, is_company)
values = self.fill_values(values, is_company, logged)
values["error_msg"] = _("You iban account number" values["error_msg"] = _("You iban account number"
"is not valid") "is not valid")
return request.website.render(redirect, values) return request.website.render(redirect, values)
@ -242,17 +253,29 @@ class WebsiteSubscription(http.Controller):
kwargs.get("no_registre")) kwargs.get("no_registre"))
valid = sub_req_obj.check_belgian_identification_id(no_registre) valid = sub_req_obj.check_belgian_identification_id(no_registre)
if not valid: if not valid:
values = self.fill_values(values, is_company)
values = self.fill_values(values, is_company, logged)
values["error_msg"] = _("You national register number " values["error_msg"] = _("You national register number "
"is not valid") "is not valid")
return request.website.render(redirect, values) return request.website.render(redirect, values)
values["no_registre"] = no_registre values["no_registre"] = no_registre
# check the subscription's amount # check the subscription's amount
max_amount = company.subscription_maximum_amount max_amount = company.subscription_maximum_amount
if logged:
partner = request.env.user.partner_id
if partner.member:
max_amount = max_amount - partner.total_value
if company.unmix_share_type:
share = self.get_selected_share(kwargs)
if int(partner.cooperator_type) != share.id:
values = self.fill_values(values, is_company, logged)
values["error_msg"] = (_("You can't subscribe two "
"different types of share"))
return request.website.render(redirect, values)
total_amount = float(kwargs.get('total_parts')) total_amount = float(kwargs.get('total_parts'))
if max_amount > 0 and total_amount > max_amount: if max_amount > 0 and total_amount > max_amount:
values = self.fill_values(values, is_company)
values = self.fill_values(values, is_company, logged)
values["error_msg"] = (_("You can't subscribe for an amount that " values["error_msg"] = (_("You can't subscribe for an amount that "
"exceed ") "exceed ")
+ str(max_amount) + str(max_amount)
@ -280,7 +303,6 @@ class WebsiteSubscription(http.Controller):
auth="public", website=True) auth="public", website=True)
def share_subscription(self, **kwargs): def share_subscription(self, **kwargs):
sub_req_obj = request.env['subscription.request'] sub_req_obj = request.env['subscription.request']
product_obj = request.env['product.template']
attach_obj = request.env['ir.attachment'] attach_obj = request.env['ir.attachment']
# List of file to add to ir_attachment once we have the ID # List of file to add to ir_attachment once we have the ID
post_file = [] post_file = []
@ -337,10 +359,7 @@ class WebsiteSubscription(http.Controller):
"%d/%m/%Y").date() "%d/%m/%Y").date()
values["source"] = "website" values["source"] = "website"
if kwargs.get("share_product_id"):
product_id = kwargs.get("share_product_id")
product = product_obj.sudo().browse(int(product_id)).product_variant_ids[0]
values["share_product_id"] = product.id
values["share_product_id"] = self.get_selected_share(kwargs).id
subscription_id = sub_req_obj.sudo().create(values) subscription_id = sub_req_obj.sudo().create(values)

Loading…
Cancel
Save