diff --git a/__manifest__.py b/__manifest__.py
index 47bed23..7cc89aa 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -29,15 +29,17 @@
'views/templates.xml',
'views/calendar.xml',
'views/contactus.xml',
- # 'views/partner.xml',
+ 'views/partner.xml',
# 'views/partnerimport.xml',
'report/report_donationtax.xml',
'report/report.xml',
'views/website_participation.xml',
+ 'views/product.xml',
#'report/report_donationtax.xml',
#'report/report.xml'
'views/event.xml',
- 'views/event_templates_list.xml'
+ 'views/event_templates_list.xml',
+ 'views/membership.xml'
],
# only loaded in demonstration mode
diff --git a/controllers/kalachakra.py b/controllers/kalachakra.py
index 3c97355..546117c 100644
--- a/controllers/kalachakra.py
+++ b/controllers/kalachakra.py
@@ -4,6 +4,7 @@ from odoo.http import request
import werkzeug
from datetime import datetime
from odoo.tools import format_datetime, format_date, is_html_empty
+from dateutil.relativedelta import relativedelta
from odoo.exceptions import UserError
from odoo.addons.website_event.controllers.main import WebsiteEventController
from odoo.addons.payment.controllers.portal import PaymentProcessing
@@ -89,13 +90,24 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
@http.route(['/kalachakra/participation'], type='http', auth='public', website=True, sitemap=False,csrf=False)
def participation(self,type=None,**post):
data={}
+ request.session['kalachakra_transaction']=''
if type=='donation':
- request.session['donation_transaction']=True
+ request.session['kalachakra_transaction']='donation'
+ data['kalachakra_transaction']='donation'
data['title']='make donation'
data['amount']=10
#donation product
data['products']=request.env['product.product'].search([('donation','=',True)])
+ if type=='membership':
+ request.session['kalachakra_transaction']='membership'
+ data['kalachakra_transaction']='membership'
+ data['title']='Become a member'
+ p=request.env['product.template'].search([('membership_product','=',True)])
+ if not p: raise UserError(_('No membership product, please add one'))
+ data['amount']=p.list_price
+ #membership product
+ data['products']=p
userid=request.env.context.get('uid')
@@ -137,14 +149,21 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
data['partner']=partner
-
-
-
-
return http.request.render('kalachakra.participation_form',data)
@http.route(['/kalachakra/payment_choice'], type='http', auth='public', website=True, sitemap=False,csrf=False)
def payment_choice(self,**post):
+
+ #gestion du retour page précédente depuis page de paiement
+ if not post.get('product_id'):
+ if request.session['kalachakra_transaction']=='donation':
+ request.env['donation.donation'].search(['id','=',int(request.session['donation_id'])]).unlink()
+ if request.session['kalachakra_transaction']=='membership':
+ request.env['kalachakra.membership'].search(['id','=',int(request.session['membership_id'])]).unlink()
+
+ return request.redirect('/kalachakra/participation?type='+request.session['kalachakra_transaction'])
+
+
userid=request.env.context.get('uid')
if userid:
user=request.env['res.users'].search([('id','=',int(userid))])
@@ -170,11 +189,15 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
data={}
- data['submit_txt']='Donate now'
+ if request.session['kalachakra_transaction']=='donation':
+ data['submit_txt']='Donate now'
+ if request.session['kalachakra_transaction'] in ['membership'] :
+ data['submit_txt']='Pay now'
+
data['success_url']='/kalachakra/payment/success'
data['error_url']='/kalachakra/payment/error'
- if request.session.get('donation_transaction')==True:
+ if request.session['kalachakra_transaction'] in ['donation','membership']:
data['acquirers'] = list(request.env['payment.acquirer'].search([
('state', 'in', ['enabled', 'test']),
('company_id', '=', request.env.company.id),
@@ -195,57 +218,48 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
data['payment_tokens']=payment_tokens
#create donation
- vals={}
- vals['partner_id']=partner.id
- vals['donation_date']=datetime.now()
- vals['tax_receipt_option']='annual'
- #mode de paiement CB
- electronic_method=request.env['account.payment.method'].search([('code','=','electronic')],limit=1)
- if electronic_method:
- cb_mode=request.env['account.payment.mode'].search([('payment_method_id','=',int(electronic_method.id))],limit=1)
- if cb_mode:
- vals['payment_mode_id']=cb_mode.id
- else:
- raise Warning('please configure credit card mode')
- vals['state']='draft'
- vals['payment_ref']='internet'
- donation_draft=request.env['donation.donation'].sudo().create(vals)
- vals={}
- #create line donation
- vals['donation_id']=donation_draft.id
- product=request.env['product.product'].search([('id','=',int(post.get('product_id')))])
- vals['product_id']=int(post.get('product_id'))
- vals['display_name']=product.name
- vals['quantity']=1
- vals['unit_price']=post.get('amount')
- vals['tax_receipt_ok']=product.tax_receipt_ok
-
-
- donation_line=request.env['donation.line'].sudo().create(vals)
-
-
- #create sale order
- # vals={}
-
-
- # vals['partner_id']=partner.id
- # order_draft=request.env['sale.order'].sudo().create(vals)
- # data['order_id']=order_draft.id
- # #création des lignes de devis
- # vals={}
- # vals['order_id']=order_draft.id
- # #ajout du produit
- # vals['product_id']=int(post.get('product_id'))
- # vals['product_uom_qty']=1
- # vals['price_unit']=post.get('amount')
-
- # product=request.env['product.product'].search([('id','=',int(post.get('product_id')))])
- # vals['name']=product.name
-
- # order_line=request.env['sale.order.line'].sudo().create(vals)
+ if request.session['kalachakra_transaction'] in ['donation']:
+ vals={}
+ vals['partner_id']=partner.id
+ vals['donation_date']=datetime.now()
+ vals['tax_receipt_option']='annual'
+ #mode de paiement CB
+ electronic_method=request.env['account.payment.method'].search([('code','=','electronic')],limit=1)
+ if electronic_method:
+ cb_mode=request.env['account.payment.mode'].search([('payment_method_id','=',int(electronic_method.id))],limit=1)
+ if cb_mode:
+ vals['payment_mode_id']=cb_mode.id
+ else:
+ raise Warning('please configure credit card mode')
+ vals['state']='draft'
+ vals['payment_ref']='internet'
+ donation_draft=request.env['donation.donation'].sudo().create(vals)
+ vals={}
+ #create line donation
+ vals['donation_id']=donation_draft.id
+ product=request.env['product.product'].search([('id','=',int(post.get('product_id')))])
+ vals['product_id']=int(post.get('product_id'))
+ vals['display_name']=product.name
+ vals['quantity']=1
+ vals['unit_price']=post.get('amount')
+ vals['tax_receipt_ok']=product.tax_receipt_ok
+
+
+ donation_line=request.env['donation.line'].sudo().create(vals)
+
+ data['order_id']=donation_draft.id
+ request.session['donation_id'] = donation_draft.id
- data['order_id']=donation_draft.id
- request.session['donation_id'] = donation_draft.id
+ #create membership
+ if request.session['kalachakra_transaction'] in ['membership']:
+ vals={}
+ vals['partner_id']=partner.id
+ vals['product_id']=int(post.get('product_id'))
+ vals['start_date']=datetime.now()
+ vals['end_date']=datetime.now()+relativedelta(years=1)
+ membership=request.env['kalachakra.membership'].sudo().create(vals)
+ data['order_id']=membership.id
+ request.session['membership_id'] = membership.id
return http.request.render('kalachakra.payment_choice_form',data)
@@ -263,7 +277,10 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
user is redirected to the checkout page
"""
# Ensure a payment acquirer is selected
- donation_id=order_id
+
+
+
+
if not acquirer_id:
return False
@@ -272,37 +289,71 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
except:
return False
+ if request.session['kalachakra_transaction'] in ['donation']:
+ # Retrieve the donation
+ donation_id=order_id
+ donation=request.env['donation.donation'].search([('id','=',int(donation_id))], limit=1)
- # Retrieve the donation
- donation=request.env['donation.donation'].search([('id','=',int(donation_id))], limit=1)
-
- # Ensure there is something to proceed
- if not donation or (donation and not donation.line_ids):
- return False
+ # Ensure there is something to proceed
+ if not donation or (donation and not donation.line_ids):
+ return False
+
+ assert donation.partner_id.id != request.website.partner_id.id
+
+ # Create transaction
+ vals = {'acquirer_id': acquirer_id,
+ 'return_url': '/kalachakra/payment/validate'}
+
+ if save_token:
+ vals['type'] = 'form_save'
+ if token:
+ vals['payment_token_id'] = int(token)
+
+ transaction = donation._create_payment_transaction(vals)
+
+ # store the new transaction into the transaction list and if there's an old one, we remove it
+ # until the day the ecommerce supports multiple orders at the same time
+ last_tx_id = request.session.get('__website_sale_last_tx_id')
+ last_tx = request.env['payment.transaction'].browse(last_tx_id).sudo().exists()
+ if last_tx:
+ PaymentProcessing.remove_payment_transaction(last_tx)
+ PaymentProcessing.add_payment_transaction(transaction)
+ request.session['__website_sale_last_tx_id'] = transaction.id
+ return transaction.render_donation_button(donation)
+
+ if request.session['kalachakra_transaction'] in ['membership']:
+ # Retrieve the donation
+ membership_id=order_id
+ membership=request.env['kalachakra.membership'].search([('id','=',int(membership_id))], limit=1)
- assert donation.partner_id.id != request.website.partner_id.id
- # Create transaction
- vals = {'acquirer_id': acquirer_id,
- 'return_url': '/kalachakra/payment/validate'}
-
- if save_token:
- vals['type'] = 'form_save'
- if token:
- vals['payment_token_id'] = int(token)
-
- transaction = donation._create_payment_transaction(vals)
-
- # store the new transaction into the transaction list and if there's an old one, we remove it
- # until the day the ecommerce supports multiple orders at the same time
- last_tx_id = request.session.get('__website_sale_last_tx_id')
- last_tx = request.env['payment.transaction'].browse(last_tx_id).sudo().exists()
- if last_tx:
- PaymentProcessing.remove_payment_transaction(last_tx)
- PaymentProcessing.add_payment_transaction(transaction)
- request.session['__website_sale_last_tx_id'] = transaction.id
- return transaction.render_donation_button(donation)
+ # Ensure there is something to proceed
+ if not membership :
+ return False
+
+ assert membership.partner_id.id != request.website.partner_id.id
+
+ # Create transaction
+ vals = {'acquirer_id': acquirer_id,
+ 'return_url': '/kalachakra/payment/validate'}
+
+ if save_token:
+ vals['type'] = 'form_save'
+ if token:
+ vals['payment_token_id'] = int(token)
+
+ transaction = membership._create_payment_transaction(vals)
+
+ # store the new transaction into the transaction list and if there's an old one, we remove it
+ # until the day the ecommerce supports multiple orders at the same time
+ last_tx_id = request.session.get('__website_sale_last_tx_id')
+ last_tx = request.env['payment.transaction'].browse(last_tx_id).sudo().exists()
+ if last_tx:
+ PaymentProcessing.remove_payment_transaction(last_tx)
+ PaymentProcessing.add_payment_transaction(transaction)
+ request.session['__website_sale_last_tx_id'] = transaction.id
+ return transaction.render_membership_button(membership)
http.route('/kalachakra/payment/token', type='http', auth='public', website=True, sitemap=False)
def kalachakra_payment_token(self, pm_id=None, **kwargs):
@@ -323,7 +374,12 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
# Create transaction
vals = {'payment_token_id': pm_id, 'return_url': '/kalachakra/payment/validate'}
- tx = donation._create_payment_transaction(vals)
+ if request.session['kalachakra_transaction'] in ['donation']:
+ tx = donation._create_payment_transaction(vals)
+
+ if request.session['kalachakra_transaction'] in ['membership']:
+ tx = membership._create_payment_transaction(vals)
+
request.session['transaction_id']=tx.id
PaymentProcessing.add_payment_transaction(tx)
return request.redirect('kalachakra/payment/process')
@@ -347,11 +403,20 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
- UDPATE ME
"""
- donation_id=int(request.session['donation_id'])
- #validation du don car la tranasction est ok
- donation=request.env['donation.donation'].search([('id','=',donation_id)])
- donation.state='done'
- request.session['donation_id']=None
+ if request.session['kalachakra_transaction'] in ['donation']:
+
+ donation_id=int(request.session['donation_id'])
+ #validation du don car la tranasction est ok
+ donation=request.env['donation.donation'].search([('id','=',donation_id)])
+ donation.state='done'
+ request.session['donation_id']=None
+
+ if request.session['kalachakra_transaction'] in ['membership']:
+ membership_id=int(request.session['membership_id'])
+ #validation du don car la tranasction est ok
+ membership=request.env['kalachakra.membership'].search([('id','=',membership_id)])
+ membership.state='done'
+ request.session['membership_id']=None
transaction_id=int(request.session['__website_sale_last_tx_id'] )
tx = request.env['payment.transaction'].sudo().browse(transaction_id)
@@ -362,43 +427,10 @@ class kalachakra_event(WebsiteEventController,PaymentProcessing):
PaymentProcessing.remove_payment_transaction(tx)
return request.redirect('/kalachakra/payment/confirmation')
- # if sale_order_id is None:
- # order = request.website.sale_get_order()
- # else:
- # order = request.env['sale.order'].sudo().browse(sale_order_id)
- # assert order.id == request.session.get('sale_last_order_id')
-
- # if transaction_id:
- # tx = request.env['payment.transaction'].sudo().browse(transaction_id)
- # assert tx in order.transaction_ids()
- # elif order:
- # tx = order.get_portal_last_transaction()
- # else:
- # tx = None
-
- # if not order or (order.amount_total and not tx):
- # return request.redirect('/kalachakra/ma')
-
- # if order and not order.amount_total and not tx:
- # order.with_context(send_email=True).action_confirm()
- # return request.redirect(order.get_portal_url())
-
- # # clean context and session, then redirect to the confirmation page
- # request.website.sale_reset()
- # if tx and tx.state == 'draft':
- # return request.redirect('/kalachakra/')
-
- # PaymentProcessing.remove_payment_transaction(tx)
- # return request.redirect('/kalachakra/payment/confirmation')
@http.route(['/kalachakra/payment/confirmation'], type='http', auth="public", website=True, sitemap=False)
def kalachakra_payment_confirmation(self, **post):
return request.render("kalachakra.thankyou")
- # sale_order_id = request.session.get('sale_last_order_id')
- # if sale_order_id:
- # order = request.env['sale.order'].sudo().browse(sale_order_id)
- # return request.render("website_sale.confirmation", {'order': order})
- # else:
- # return request.redirect('/shop')
\ No newline at end of file
+
\ No newline at end of file
diff --git a/i18n/fr.po b/i18n/fr.po
index e78f3b7..4c3a966 100644
--- a/i18n/fr.po
+++ b/i18n/fr.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0-20210413\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-30 12:54+0000\n"
-"PO-Revision-Date: 2022-05-30 12:54+0000\n"
+"POT-Creation-Date: 2022-05-31 13:07+0000\n"
+"PO-Revision-Date: 2022-05-31 13:07+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,7 @@ msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
msgid "5 Passage Delessert – 75010 PARIS"
-msgstr "5 Passage Delessert – 75010 PARIS""
+msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
@@ -30,6 +30,13 @@ msgstr ""
msgid "Paris, le {{DATE}}"
msgstr ""
+#. module: kalachakra
+#: model_terms:ir.ui.view,arch_db:kalachakra.event_category_tag
+msgid ""
+"\n"
+" tags"
+msgstr ""
+
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
msgid ""
@@ -39,18 +46,21 @@ msgstr ""
#. module: kalachakra
#: code:addons/kalachakra/models/donation.py:0
+#: code:addons/kalachakra/models/membership.py:0
#, python-format
msgid "A journal must be specified for the acquirer %s."
msgstr ""
#. module: kalachakra
#: code:addons/kalachakra/models/donation.py:0
+#: code:addons/kalachakra/models/membership.py:0
#, python-format
msgid "A payment acquirer is required to create a transaction."
msgstr ""
#. module: kalachakra
#: code:addons/kalachakra/models/donation.py:0
+#: code:addons/kalachakra/models/membership.py:0
#, python-format
msgid ""
"A transaction can't be linked to sales orders having different partners."
@@ -66,6 +76,11 @@ msgstr "Ajouter l'événement au calendrier google"
msgid "Affectation *"
msgstr ""
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__amount
+msgid "Amount"
+msgstr "Montant"
+
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.participation_form
msgid "Amount (€)"
@@ -89,7 +104,7 @@ msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
msgid "Associationnn Cultuelle Kalachakra – Roue de la Vie"
-msgstr "Association Cultuelle Kalachakra – Roue de la Vie"
+msgstr ""
#. module: kalachakra
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__file
@@ -104,9 +119,10 @@ msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.participation_form
msgid "Country *"
-msgstr "Pays *"
+msgstr ""
#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__create_uid
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__create_uid
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__create_uid
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__create_uid
@@ -114,11 +130,17 @@ msgid "Created by"
msgstr ""
#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__create_date
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__create_date
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__create_date
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__create_date
msgid "Created on"
-msgstr ""
+msgstr "Créé le"
+
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__currency_id
+msgid "Currency"
+msgstr "devise"
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
@@ -129,10 +151,12 @@ msgstr ""
#: model:ir.model.fields,field_description:kalachakra.field_donation_donation__display_name
#: model:ir.model.fields,field_description:kalachakra.field_event_event__display_name
#: model:ir.model.fields,field_description:kalachakra.field_event_tag_category__display_name
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__display_name
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__display_name
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__display_name
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__display_name
#: model:ir.model.fields,field_description:kalachakra.field_payment_transaction__display_name
+#: model:ir.model.fields,field_description:kalachakra.field_product_template__display_name
msgid "Display Name"
msgstr "Nom affiché"
@@ -169,28 +193,30 @@ msgid ""
"Firstname\n"
" *"
msgstr ""
-"Prénom\n"
-" *"
#. module: kalachakra
#: model:ir.model.fields,field_description:kalachakra.field_donation_donation__id
#: model:ir.model.fields,field_description:kalachakra.field_event_event__id
#: model:ir.model.fields,field_description:kalachakra.field_event_tag_category__id
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__id
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__id
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__id
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__id
#: model:ir.model.fields,field_description:kalachakra.field_payment_transaction__id
+#: model:ir.model.fields,field_description:kalachakra.field_product_template__id
msgid "ID"
msgstr ""
#. module: kalachakra
#: code:addons/kalachakra/models/donation.py:0
+#: code:addons/kalachakra/models/membership.py:0
#, python-format
msgid "Invalid token found! Token acquirer %s != %s"
msgstr ""
#. module: kalachakra
#: code:addons/kalachakra/models/donation.py:0
+#: code:addons/kalachakra/models/membership.py:0
#, python-format
msgid "Invalid token found! Token partner %s != %s"
msgstr ""
@@ -199,14 +225,17 @@ msgstr ""
#: model:ir.model.fields,field_description:kalachakra.field_donation_donation____last_update
#: model:ir.model.fields,field_description:kalachakra.field_event_event____last_update
#: model:ir.model.fields,field_description:kalachakra.field_event_tag_category____last_update
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership____last_update
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft____last_update
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile____last_update
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping____last_update
#: model:ir.model.fields,field_description:kalachakra.field_payment_transaction____last_update
+#: model:ir.model.fields,field_description:kalachakra.field_product_template____last_update
msgid "Last Modified on"
msgstr "Last Updated on"
#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__write_uid
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__write_uid
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__write_uid
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__write_uid
@@ -214,6 +243,7 @@ msgid "Last Updated by"
msgstr ""
#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__write_date
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraft__write_date
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__write_date
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__write_date
@@ -237,6 +267,19 @@ msgstr ""
msgid "Madame, Monsieur,"
msgstr ""
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_payment_transaction__membership_ids
+msgid "Membership"
+msgstr "Adhésion"
+
+#. module: kalachakra
+#: model:ir.actions.act_window,name:kalachakra.membership_action
+#: model:ir.ui.menu,name:kalachakra.membership_menu
+#: model:ir.ui.menu,name:kalachakra.membership_title_menu
+#: model:ir.ui.menu,name:kalachakra.membership_top_menu
+msgid "Memberships"
+msgstr "Adhésions"
+
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
msgid "Mode de versement : Chèque, prélèvement ou espèces"
@@ -249,6 +292,12 @@ msgid ""
" *"
msgstr ""
+#. module: kalachakra
+#: code:addons/kalachakra/controllers/kalachakra.py:0
+#, python-format
+msgid "No membership product, please add one"
+msgstr ""
+
#. module: kalachakra
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__file_name
msgid "Nom du fichier"
@@ -289,6 +338,8 @@ msgstr ""
#. module: kalachakra
#: code:addons/kalachakra/models/donation.py:0
+#: code:addons/kalachakra/models/payment_transaction.py:0
+#: code:addons/kalachakra/models/payment_transaction.py:0
#, python-format
msgid "Pay Now"
msgstr ""
@@ -305,24 +356,34 @@ msgstr "Transaction"
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.participation_form
-msgid "Choix du paiement"
+msgid "Payment choice"
msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.participation_form
msgid "Phone"
-msgstr "Téléphone"
+msgstr ""
+
+#. module: kalachakra
+#: model:ir.model,name:kalachakra.model_product_template
+msgid "Product Template"
+msgstr "Modèle d'article"
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.event_view_form
msgid "Remove event from google agenda"
-msgstr "Suppriemr l'événement du calendrier google"
+msgstr "Supprimer l'événement du calendrier google"
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
msgid "Reçu de dons aux Œuvres"
msgstr ""
+#. module: kalachakra
+#: model_terms:ir.ui.view,arch_db:kalachakra.view_membership_search
+msgid "Search"
+msgstr ""
+
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
msgid "Signature
"
@@ -339,28 +400,26 @@ msgid ""
"Street 1\n"
" *"
msgstr ""
-"Rue 1\n"
-" *"
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.participation_form
msgid "Street 2"
-msgstr "Rue 2"
+msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.thankyou
msgid "Thank you for your generosity !"
-msgstr "Merci pour votre générosité!"
+msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.participation_form
msgid "Title *"
-msgstr "Titre *"
+msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.event_calendartui
msgid "Today"
-msgstr "Ajourd'hui"
+msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
@@ -370,7 +429,7 @@ msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.participation_form
msgid "Zip"
-msgstr "Code postal"
+msgstr ""
#. module: kalachakra
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile__active
@@ -380,7 +439,7 @@ msgstr ""
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.thankyou
msgid "back Home"
-msgstr "Page d'accueil"
+msgstr ""
#. module: kalachakra
#: model:ir.model.fields,field_description:kalachakra.field_event_event__calendar_id
@@ -392,11 +451,26 @@ msgstr ""
msgid "coucou"
msgstr ""
+#. module: kalachakra
+#: model:ir.model.fields.selection,name:kalachakra.selection__kalachakra_membership__state__done
+msgid "done"
+msgstr "payé"
+
+#. module: kalachakra
+#: model:ir.model.fields.selection,name:kalachakra.selection__kalachakra_membership__state__draft
+msgid "draft"
+msgstr "brouillon"
+
#. module: kalachakra
#: model:ir.model,name:kalachakra.model_kalachakra_partnerdraftfile
msgid "draft partner file"
msgstr ""
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__end_date
+msgid "end date"
+msgstr "date de fin"
+
#. module: kalachakra
#: model:ir.model.fields,field_description:kalachakra.field_event_event__event_id
msgid "event id"
@@ -422,20 +496,58 @@ msgstr ""
msgid "import draft partner"
msgstr ""
+#. module: kalachakra
+#: model:ir.model,name:kalachakra.model_kalachakra_membership
+msgid "manage membership"
+msgstr "gérer les adhésions"
+
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__product_id
+#: model:ir.model.fields,field_description:kalachakra.field_product_product__membership_product
+#: model:ir.model.fields,field_description:kalachakra.field_product_template__membership_product
+msgid "membership product"
+msgstr "produit d'adhésion"
+
+#. module: kalachakra
+#: model_terms:ir.ui.view,arch_db:kalachakra.view_membership_search
+msgid "memberships of the current year"
+msgstr "adhésions de l'année civile en cours"
+
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.event_calendartui
msgid "next"
-msgstr "suite"
+msgstr ""
#. module: kalachakra
#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_partnerdraftfile_mapping__odoo_field
msgid "odoo field"
msgstr ""
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__partner_id
+msgid "partner"
+msgstr "Contact"
+
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.event_calendartui
msgid "prev"
-msgstr "précédent"
+msgstr ""
+
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__start_date
+msgid "start date"
+msgstr "Date début"
+
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_kalachakra_membership__state
+msgid "state"
+msgstr "état"
+
+#. module: kalachakra
+#: model:ir.model.fields,field_description:kalachakra.field_product_product__super_membership_product
+#: model:ir.model.fields,field_description:kalachakra.field_product_template__super_membership_product
+msgid "super membership product"
+msgstr "produit membre de soutien"
#. module: kalachakra
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
@@ -454,3 +566,8 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:kalachakra.kalachakra_template_donation_tax_receipt
msgid "{{SIGNATORY}} / {{SIGNATORYJOB}}"
msgstr ""
+
+#. module: kalachakra
+#: model_terms:ir.ui.view,arch_db:kalachakra.view_membership_search
+msgid "valid memberships"
+msgstr "adhésions valides"
\ No newline at end of file
diff --git a/models/__init__.py b/models/__init__.py
index f9a8345..a85bca6 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -4,4 +4,7 @@ from . import models
from . import partnerimport
from . import donation
from . import event
-#from . import partner
\ No newline at end of file
+from . import product
+from . import membership
+from . import payment_transaction
+from . import partner
\ No newline at end of file
diff --git a/models/donation.py b/models/donation.py
index c14102b..313452a 100644
--- a/models/donation.py
+++ b/models/donation.py
@@ -31,30 +31,7 @@ class PaymentTransaction(models.Model):
class DonationDonation(models.Model):
_inherit = 'donation.donation'
- # payment_transaction_id = fields.Many2one('payment.transaction', string='Payment Transaction', readonly=True)
- # payment_token_id = fields.Many2one(
- # 'payment.token', string="Saved payment token",
- # domain="""[
- # (payment_method_code == 'electronic', '=', 1),
- # ('company_id', '=', company_id),
- # ('acquirer_id.capture_manually', '=', False),
- # ('acquirer_id.journal_id', '=', journal_id),
- # ('partner_id', 'in', related_partner_ids),
- # ]""",
- # help="Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are not available.")
- # def _prepare_payment_transaction_vals(self):
- # self.ensure_one()
- # return {
- # 'amount': self.amount,
- # 'reference': self.ref,
- # 'currency_id': self.currency_id.id,
- # 'partner_id': self.partner_id.id,
- # 'partner_country_id': self.partner_id.country_id.id,
- # 'payment_token_id': self.payment_token_id.id,
- # 'acquirer_id': self.payment_token_id.acquirer_id.id,
- # 'payment_id': self.id,
- # 'type': 'server2server',
- # }
+
def _get_payment_type(self, tokenize=False):
self.ensure_one()
diff --git a/models/event.py b/models/event.py
index 65b74d6..8baee90 100644
--- a/models/event.py
+++ b/models/event.py
@@ -12,7 +12,7 @@ import os.path
from google.oauth2 import service_account
from googleapiclient.discovery import build
from datetime import datetime, timedelta
-
+import json
# IF YOU MODIFY THE SCOPE DELETE THE TOKEN.TXT FILE
SCOPES = ['https://www.googleapis.com/auth/calendar']
@@ -31,9 +31,11 @@ class EventEvent(models.Model):
_description = 'Event'
calendar_id=fields.Char('calendar id')
- event_id=fields.Char('event id')
+ calendar_event_id=fields.Char('event id')
def add_event_to_google_agenda(self):
+
+
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
delegated_credentials = credentials.with_subject(SUBJECT)
service = build('calendar', 'v3', credentials=delegated_credentials)
@@ -47,7 +49,7 @@ class EventEvent(models.Model):
end=self.date_end.isoformat()
diff_date=self.date_end-self.date_begin
if diff_date.days>0:
- date_param=self.date_begin.strftime('%Y-%m-%d')+'-'+self.date_end.strftime('%Y-%m-%d')
+ date_param=self.date_begin.strftime('%Y-%m-%d')+'-'+self.date_end.strftime('%Y-%m-%d')+'-'+str(self.id)
else:
date_param=self.date_begin.strftime('%Y-%m-%d')+'-'+str(self.id)
@@ -58,8 +60,8 @@ class EventEvent(models.Model):
body={"summary": self.name,
"description": description,
- "start": {"dateTime": start, "timeZone": 'Asia/Karachi'},
- "end": {"dateTime": end, "timeZone": 'Asia/Karachi'},
+ "start": {"dateTime": start, "timeZone": 'Europe/Paris'},
+ "end": {"dateTime": end, "timeZone": 'Europe/Paris'},
}
#recherche de l'id calendar lié à l'étiquette de l'événément
@@ -67,7 +69,8 @@ class EventEvent(models.Model):
if calendar_id:
event = service.events().insert(calendarId=calendar_id, body=body).execute()
- self.event_id=event['id']
+ self.calendar_event_id=event['id']
+ self.calendar_id=calendar_id
else:
raise Warning('no calendar id, please check configuration tags')
@@ -76,13 +79,14 @@ class EventEvent(models.Model):
delegated_credentials = credentials.with_subject(SUBJECT)
service = build('calendar', 'v3', credentials=delegated_credentials)
-
- #recherche de l'id calendar lié à l'étiquette de l'événément
- calendar_id=self.tag_ids.category_id.calendar_id
- if calendar_id:
- service.events().delete(calendarId=calendar_id, eventId=self.event_id).execute()
-
- self.event_id=False
- else:
- raise Warning('no calendar id, please check configuration tags')
+
+ event = service.events().get(calendarId=self.calendar_id, eventId=self.calendar_event_id).execute()
+ #raise Warning(json.dumps(event, indent = 4) )
+ if event['status'] != "cancelled" :
+ service.events().delete(calendarId=self.calendar_id, eventId=self.calendar_event_id).execute()
+
+ self.calendar_event_id=False
+ self.calendar_id=False
+
+
\ No newline at end of file
diff --git a/models/membership.py b/models/membership.py
new file mode 100644
index 0000000..6b549a4
--- /dev/null
+++ b/models/membership.py
@@ -0,0 +1,140 @@
+from odoo import models, fields, api
+from dateutil.relativedelta import relativedelta
+from datetime import datetime
+
+class kalachakra_membership(models.Model):
+ _name = 'kalachakra.membership'
+ _description = 'manage membership'
+
+
+ partner_id = fields.Many2one(
+ 'res.partner',
+ string='partner',
+ required=True,
+ index=True,
+ track_visibility='onchange',
+ ondelete='restrict'
+ )
+ product_id=fields.Many2one('product.product',required=True,string='membership product',domain="[('membership_product','=',True)]")
+ start_date=fields.Date('start date',required=True,default=lambda self: fields.Date.today())
+
+ def _default_end_date(self):
+
+ return datetime.now()+relativedelta(years=1)
+
+ end_date=fields.Date('end date',required=True,default=_default_end_date)
+ state=fields.Selection(string='state',selection=[('draft', 'draft'), ('done', 'done')],default='draft')
+ currency_id = fields.Many2one(
+ "res.currency",
+ string="Currency",
+ required=True,
+ tracking=True,
+ ondelete="restrict",
+ default=lambda self: self.env.company.currency_id,
+ )
+
+
+ amount = fields.Monetary(
+ string="Amount",
+ currency_field="currency_id",
+ readonly=True,
+ tracking=True,
+
+ )
+
+ @api.onchange('product_id')
+ def onchange_product_id(self):
+ if self.product_id:
+ self.amount = self.product_id.list_price
+
+ def _get_payment_type(self, tokenize=False):
+ self.ensure_one()
+ return 'form_save' if tokenize else 'form'
+
+ def _create_payment_transaction(self, vals):
+ '''Similar to self.env['payment.transaction'].create(vals) but the values are filled with the
+ current membership fields (e.g. the partner or the currency).
+ :param vals: The values to create a new payment.transaction.
+ :return: The newly created payment.transaction record.
+ '''
+ # Ensure the currencies are the same.
+ currency = self[0].currency_id
+ # if any(so.pricelist_id.currency_id != currency for so in self):
+ # raise ValidationError(_('A transaction can\'t be linked to sales orders having different currencies.'))
+
+ # Ensure the partner are the same.
+ partner = self[0].partner_id
+ if any(so.partner_id != partner for so in self):
+ raise ValidationError(_('A transaction can\'t be linked to sales orders having different partners.'))
+
+ # Try to retrieve the acquirer. However, fallback to the token's acquirer.
+ acquirer_id = vals.get('acquirer_id')
+ acquirer = False
+ payment_token_id = vals.get('payment_token_id')
+
+ if payment_token_id:
+ payment_token = self.env['payment.token'].sudo().browse(payment_token_id)
+
+ # Check payment_token/acquirer matching or take the acquirer from token
+ if acquirer_id:
+ acquirer = self.env['payment.acquirer'].browse(acquirer_id)
+ if payment_token and payment_token.acquirer_id != acquirer:
+ raise ValidationError(_('Invalid token found! Token acquirer %s != %s') % (
+ payment_token.acquirer_id.name, acquirer.name))
+ if payment_token and payment_token.partner_id != partner:
+ raise ValidationError(_('Invalid token found! Token partner %s != %s') % (
+ payment_token.partner.name, partner.name))
+ else:
+ acquirer = payment_token.acquirer_id
+
+ # Check an acquirer is there.
+ if not acquirer_id and not acquirer:
+ raise ValidationError(_('A payment acquirer is required to create a transaction.'))
+
+ if not acquirer:
+ acquirer = self.env['payment.acquirer'].browse(acquirer_id)
+
+ # Check a journal is set on acquirer.
+ if not acquirer.journal_id:
+ raise ValidationError(_('A journal must be specified for the acquirer %s.', acquirer.name))
+
+ if not acquirer_id and acquirer:
+ vals['acquirer_id'] = acquirer.id
+
+ vals.update({
+ 'amount': sum(self.mapped('amount')),
+ 'currency_id': currency.id,
+ 'partner_id': partner.id,
+ 'membership_ids': [(6, 0, self.ids)],
+ 'type': self[0]._get_payment_type(vals.get('type')=='form_save'),
+ })
+
+ transaction = self.env['payment.transaction'].create(vals)
+
+ # Process directly if payment_token
+ if transaction.payment_token_id:
+ transaction.s2s_do_transaction()
+
+ return transaction
+
+ # @api.model
+ # def create(self,vals):
+
+ # res=super(kalachakra_membership, self).create(vals)
+
+ # #on ajoute l'étiquette membre au contact
+ # #si l'étiquette membre n'existe pas on l'a créé !
+ # label_member=self.env['res.partner.category'].search([('name','=','member')])
+ # id_label_member=label_member.id
+ # if not label_member:
+ # vals={}
+ # vals['name']='member'
+ # res=self.env['res.partner.category'].create(vals)
+ # id_label_member=res.id
+ # partner=self.env['res.partner'].search([('id','=',int(self.partner_id))])
+ # if partner:
+ # if id_label_member not in partner.category_id:
+ # partner.write({category_id:(4, id_label_member)})
+
+
+
diff --git a/models/partner.py b/models/partner.py
index f07b1b4..3d1ebd6 100644
--- a/models/partner.py
+++ b/models/partner.py
@@ -1,7 +1,7 @@
from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError, Warning
from psycopg2 import sql, DatabaseError
-
+from datetime import datetime
from werkzeug import utils
@@ -58,5 +58,25 @@ class partner(models.Model):
('refuge','Refuge'),
('zoom','zoom'),
],'Origine', index=True)
+
+ date_adhesion=fields.Char(string='Date adhesion', readonly=True)
+
+ def _compute_member_status(self):
+ for rec in self:
+ member=rec.env['kalachakra.membership'].search([('partner_id','=',rec.id),('end_date','<=',datetime.now())])
+ if member : rec.member_status='member'
+ else :rec.member_status='not member'
+ if rec.super_member: rec.member_status='super member'
+
+ member_status=fields.Selection(string='member status',selection=[('not member','Not member'),('member','Member'),('super member','Super member')]
+ ,compute="_compute_member_status", sotre=True)
+
+ super_member=fields.Boolean("Super member")
+
+ @api.onchange('super_member')
+ def onchange_super_member(self):
+
+ self._compute_member_status()
+
- date_adhesion=fields.Char(string='Date adhesion', readonly=True)
\ No newline at end of file
+
\ No newline at end of file
diff --git a/models/payment_transaction.py b/models/payment_transaction.py
new file mode 100644
index 0000000..71a0423
--- /dev/null
+++ b/models/payment_transaction.py
@@ -0,0 +1,48 @@
+from odoo import models, fields, api,_
+from odoo.exceptions import UserError, ValidationError,Warning
+from psycopg2 import sql, DatabaseError
+from datetime import datetime
+
+from werkzeug import utils
+import base64
+
+class PaymentTransaction(models.Model):
+ _inherit = 'payment.transaction'
+
+ donation_ids = fields.Many2many('donation.donation', 'donation_transaction_rel', 'transaction_id', 'donation_id',
+ string='Donations', copy=False, readonly=True)
+
+ membership_ids = fields.Many2many('kalachakra.membership', 'membership_transaction_rel', 'transaction_id', 'membership_id',
+ string='Membership', copy=False, readonly=True)
+
+
+ def render_donation_button(self, donation, submit_txt=None, render_values=None):
+ values = {
+ 'partner_id': donation.partner_id.id,
+ 'type': self.type,
+ }
+ if render_values:
+ values.update(render_values)
+ # Not very elegant to do that here but no choice regarding the design.
+ self._log_payment_transaction_sent()
+ return self.acquirer_id.with_context(submit_class='btn btn-primary', submit_txt=submit_txt or _('Pay Now')).sudo().render(
+ self.reference,
+ donation.amount_total,
+ donation.currency_id.id,
+ values=values,
+ )
+ def render_membership_button(self, membership, submit_txt=None, render_values=None):
+ values = {
+ 'partner_id': membership.partner_id.id,
+ 'type': self.type,
+ }
+ if render_values:
+ values.update(render_values)
+ # Not very elegant to do that here but no choice regarding the design.
+ self._log_payment_transaction_sent()
+ return self.acquirer_id.with_context(submit_class='btn btn-primary', submit_txt=submit_txt or _('Pay Now')).sudo().render(
+ self.reference,
+ membership.amount,
+ membership.currency_id.id,
+ values=values,
+ )
\ No newline at end of file
diff --git a/models/product.py b/models/product.py
new file mode 100644
index 0000000..e537831
--- /dev/null
+++ b/models/product.py
@@ -0,0 +1,13 @@
+from odoo import models, fields, api
+from odoo.exceptions import UserError, ValidationError
+from psycopg2 import sql, DatabaseError
+
+from werkzeug import utils
+
+
+class ProductTemplate(models.Model):
+ _inherit = "product.template"
+
+ membership_product = fields.Boolean(string="membership product", tracking=True)
+ super_membership_product = fields.Boolean(string="super membership product", tracking=True)
+
\ No newline at end of file
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 97dd8b9..277b982 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+
+access_kalachakra_membership,kalachakra.membership,model_kalachakra_membership,base.group_user,1,1,1,1
+
diff --git a/static/description/membership.png b/static/description/membership.png
new file mode 100644
index 0000000..973df20
Binary files /dev/null and b/static/description/membership.png differ
diff --git a/views/event.xml b/views/event.xml
index 500854f..4f8d370 100644
--- a/views/event.xml
+++ b/views/event.xml
@@ -21,8 +21,9 @@
-
-
+
+
+
diff --git a/views/membership.xml b/views/membership.xml
new file mode 100644
index 0000000..f96fcdc
--- /dev/null
+++ b/views/membership.xml
@@ -0,0 +1,52 @@
+
+
+
+
+ kalachakra_member list
+ kalachakra.membership
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Memberships
+ kalachakra.membership
+ tree,form,pivot
+
+
+
+ kalachakra.membership.search
+ kalachakra.membership
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/views/partner.xml b/views/partner.xml
index 15baae1..ab15cfb 100644
--- a/views/partner.xml
+++ b/views/partner.xml
@@ -21,62 +21,20 @@
-
+
+
+
+
-
- Partners draft
- kalachakra.partnerdraft
- tree,form
-
-
-
-
- Partners draft file
- kalachakra.partnerdraftfile
- tree,form
-
-
-
-
- file mapping
- kalachakra.partnerdraftfile_mapping
- tree,form
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
diff --git a/views/product.xml b/views/product.xml
new file mode 100644
index 0000000..7f1f8b5
--- /dev/null
+++ b/views/product.xml
@@ -0,0 +1,17 @@
+
+
+ kalachakra.product.template.form
+ product.template
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/views/website_participation.xml b/views/website_participation.xml
index de1336d..a8e1ff9 100644
--- a/views/website_participation.xml
+++ b/views/website_participation.xml
@@ -101,7 +101,12 @@
+
+
+
+
+