@ -0,0 +1,17 @@ |
|||||
|
Website Coupon Code v10 |
||||
|
======================= |
||||
|
Manage Website Coupon Codes & Its Operations |
||||
|
|
||||
|
Features |
||||
|
======== |
||||
|
|
||||
|
* Create and configure vouchers for providing a discount. |
||||
|
* Generate a unique code for each coupon. |
||||
|
* Limit the usage of coupons by each user. |
||||
|
* Provide a validity for the coupons. |
||||
|
* History of coupons used by each customer. |
||||
|
|
||||
|
|
||||
|
Credits |
||||
|
======= |
||||
|
Cybrosys Techno Solutions, <http://www.cybrosys.com> |
@ -0,0 +1,25 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
||||
|
# you can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# It is forbidden to publish, distribute, sublicense, or sell copies |
||||
|
# of the Software or modified copies of the Software. |
||||
|
# |
||||
|
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import models |
||||
|
import controllers |
@ -0,0 +1,42 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
||||
|
# you can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# It is forbidden to publish, distribute, sublicense, or sell copies |
||||
|
# of the Software or modified copies of the Software. |
||||
|
# |
||||
|
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
{ |
||||
|
'name': 'Website Coupon Code', |
||||
|
'version': '10.0.1.0.0', |
||||
|
'category': 'Website', |
||||
|
'sequence': 56, |
||||
|
'summary': 'Manage Website Coupon Codes & Its Operations', |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'website': 'http://www.cybrosys.com', |
||||
|
'depends': ['sale', 'website_sale'], |
||||
|
'data': [ |
||||
|
'data/product_data.xml', |
||||
|
'views/gift_voucher.xml', |
||||
|
'views/applied_coupons.xml', |
||||
|
'views/templates.xml', |
||||
|
], |
||||
|
'installable': True, |
||||
|
'license': 'LGPL-3', |
||||
|
'auto_install': False, |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
||||
|
# you can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# It is forbidden to publish, distribute, sublicense, or sell copies |
||||
|
# of the Software or modified copies of the Software. |
||||
|
# |
||||
|
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import main |
@ -0,0 +1,138 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
||||
|
# you can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# It is forbidden to publish, distribute, sublicense, or sell copies |
||||
|
# of the Software or modified copies of the Software. |
||||
|
# |
||||
|
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
from odoo import http, tools, _ |
||||
|
from odoo.http import request |
||||
|
from datetime import datetime |
||||
|
from dateutil import parser |
||||
|
|
||||
|
|
||||
|
class WebsiteCoupon(http.Controller): |
||||
|
|
||||
|
@http.route(['/shop/cart'], type='http', auth="public", website=True) |
||||
|
def cart(self, **post): |
||||
|
"""This function is overwritten because we need to pass the value 'coupon_not_available' |
||||
|
to the template, inorder to show the error message to the user that, 'this coupon is not available'. """ |
||||
|
|
||||
|
order = request.website.sale_get_order() |
||||
|
if order: |
||||
|
from_currency = order.company_id.currency_id |
||||
|
to_currency = order.pricelist_id.currency_id |
||||
|
compute_currency = lambda price: from_currency.compute(price, to_currency) |
||||
|
else: |
||||
|
compute_currency = lambda price: price |
||||
|
|
||||
|
values = { |
||||
|
'website_sale_order': order, |
||||
|
'compute_currency': compute_currency, |
||||
|
'suggested_products': [], |
||||
|
} |
||||
|
if order: |
||||
|
_order = order |
||||
|
if not request.env.context.get('pricelist'): |
||||
|
_order = order.with_context(pricelist=order.pricelist_id.id) |
||||
|
values['suggested_products'] = _order._cart_accessories() |
||||
|
|
||||
|
if post.get('type') == 'popover': |
||||
|
return request.render("website_sale.cart_popover", values) |
||||
|
|
||||
|
if post.get('code_not_available'): |
||||
|
values['code_not_available'] = post.get('code_not_available') |
||||
|
elif post.get('coupon_not_available'): |
||||
|
values['coupon_not_available'] = post.get('coupon_not_available') |
||||
|
|
||||
|
return request.render("website_sale.cart", values) |
||||
|
|
||||
|
@http.route(['/shop/gift_coupon'], type='http', auth="public", website=True) |
||||
|
def gift_coupon(self, promo_voucher, **post): |
||||
|
"""This function will be executed when we click the apply button of the voucher code in the website. |
||||
|
It will verify the validity and availability of that coupon. If it can be applied, the coupon will be applied |
||||
|
and coupon balance will also be updated""" |
||||
|
|
||||
|
curr_user = request.env.user |
||||
|
coupon = request.env['gift.coupon'].sudo().search([('code', '=', promo_voucher)], limit=1) |
||||
|
flag = True |
||||
|
if coupon and coupon.total_avail > 0: |
||||
|
applied_coupons = request.env['partner.coupon'].sudo().search([('coupon', '=', promo_voucher), |
||||
|
('partner_id', '=', curr_user.partner_id.id)], limit=1) |
||||
|
|
||||
|
# checking voucher date and limit for each user for this coupon--------------------- |
||||
|
if coupon.partner_id: |
||||
|
if curr_user.partner_id.id != coupon.partner_id.id: |
||||
|
flag = False |
||||
|
today = datetime.now().date() |
||||
|
if flag and applied_coupons.number < coupon.limit and today <= parser.parse(coupon.voucher.expiry_date).date(): |
||||
|
# checking coupon validity --------------------------- |
||||
|
# checking date of coupon ------------ |
||||
|
if coupon.start_date and coupon.end_date: |
||||
|
if today < parser.parse(coupon.start_date).date() or today > parser.parse(coupon.end_date).date(): |
||||
|
flag = False |
||||
|
elif coupon.start_date: |
||||
|
if today < parser.parse(coupon.start_date).date(): |
||||
|
flag = False |
||||
|
elif coupon.end_date: |
||||
|
if today > parser.parse(coupon.end_date).date(): |
||||
|
flag = False |
||||
|
else: |
||||
|
flag = False |
||||
|
else: |
||||
|
flag = False |
||||
|
if flag: |
||||
|
product_id = coupon.voucher.product_id |
||||
|
voucher_val = coupon.voucher_val |
||||
|
type = coupon.type |
||||
|
coupon_product = request.env['product.product'].sudo().search([('name', '=', 'Gift Coupon')], limit=1) |
||||
|
if coupon_product: |
||||
|
order = request.website.sale_get_order(force_create=1) |
||||
|
flag_product = False |
||||
|
for line in order.order_line: |
||||
|
if line.product_id.name == 'Gift Coupon': |
||||
|
flag = False |
||||
|
break |
||||
|
if line.product_id.name == product_id.name: |
||||
|
flag_product = True |
||||
|
if flag and flag_product: |
||||
|
if type == 'fixed': |
||||
|
res = coupon_product.product_tmpl_id.write({'list_price': -voucher_val}) |
||||
|
elif type == 'percentage': |
||||
|
amount = 0 |
||||
|
for line in order.order_line: |
||||
|
amount += line.product_uom_qty * line.price_unit |
||||
|
amount_final = (voucher_val/100) * amount |
||||
|
res = coupon_product.product_tmpl_id.write({'list_price': -amount_final}) |
||||
|
value = order._cart_update(product_id=coupon_product.id, set_qty=1, add_qty=1) |
||||
|
|
||||
|
# updating coupon balance-------------- |
||||
|
total = coupon.total_avail - 1 |
||||
|
coupon.write({'total_avail': total}) |
||||
|
# creating a record for this partner, i.e he is used this coupen once----------- |
||||
|
if not applied_coupons: |
||||
|
res = curr_user.partner_id.write({'applied_coupon': [(0, 0, {'partner_id': curr_user.partner_id.id, |
||||
|
'coupon': coupon.code, |
||||
|
'number': 1})]}) |
||||
|
else: |
||||
|
applied_coupons.write({'number': applied_coupons.number + 1}) |
||||
|
else: |
||||
|
return request.redirect("/shop/cart?coupon_not_available=1") |
||||
|
|
||||
|
return request.redirect("/shop/cart") |
@ -0,0 +1,8 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo noupdate="1"> |
||||
|
<record model="product.product" id="discount_product"> |
||||
|
<field name="name">Gift Coupon</field> |
||||
|
<!--<field name="type">service</field>--> |
||||
|
</record> |
||||
|
|
||||
|
</odoo> |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
||||
|
# you can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# It is forbidden to publish, distribute, sublicense, or sell copies |
||||
|
# of the Software or modified copies of the Software. |
||||
|
# |
||||
|
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import gift_voucher |
@ -0,0 +1,84 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
||||
|
# you can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# It is forbidden to publish, distribute, sublicense, or sell copies |
||||
|
# of the Software or modified copies of the Software. |
||||
|
# |
||||
|
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import string |
||||
|
import random |
||||
|
from odoo import models, fields, api, _ |
||||
|
from odoo.exceptions import UserError |
||||
|
|
||||
|
|
||||
|
class GiftVoucher(models.Model): |
||||
|
_name = 'gift.voucher' |
||||
|
|
||||
|
name = fields.Char(string="Name", required=True) |
||||
|
product_id = fields.Many2one('product.product', string="Product", required=True) |
||||
|
min_value = fields.Integer(string="Minimum Voucher Value", required=True) |
||||
|
max_value = fields.Integer(string="Maximum Voucher Value", required=True) |
||||
|
expiry_date = fields.Date(string="Expiry Date", required=True) |
||||
|
|
||||
|
|
||||
|
class GiftCoupon(models.Model): |
||||
|
_name = 'gift.coupon' |
||||
|
|
||||
|
def get_code(self): |
||||
|
size = 7 |
||||
|
chars = string.ascii_uppercase + string.digits |
||||
|
return ''.join(random.choice(chars) for _ in range(size)) |
||||
|
|
||||
|
_sql_constraints = [ |
||||
|
('name_uniq', 'unique (code)', "Code already exists !"), |
||||
|
] |
||||
|
|
||||
|
name = fields.Char(string="Name", required=True) |
||||
|
code = fields.Char(string="Code", default=get_code) |
||||
|
voucher = fields.Many2one('gift.voucher', string="Voucher", required=True) |
||||
|
start_date = fields.Date(string="Start Date") |
||||
|
end_date = fields.Date(string="End Date") |
||||
|
partner_id = fields.Many2one('res.partner', string="Limit to a Single Partner") |
||||
|
limit = fields.Integer(string="Total Available For Each User", default=1) |
||||
|
total_avail = fields.Integer(string="Total Available", default=1) |
||||
|
|
||||
|
voucher_val = fields.Float(string="Voucher Value") |
||||
|
type = fields.Selection([ |
||||
|
('fixed', 'Fixed Amount'), |
||||
|
('percentage', 'Percentage'), |
||||
|
], store=True, default='fixed') |
||||
|
|
||||
|
@api.onchange('voucher_val') |
||||
|
def check_val(self): |
||||
|
if self.voucher_val > self.voucher.max_value or self.voucher_val < self.voucher.min_value: |
||||
|
raise UserError(_("Please check the voucher value")) |
||||
|
|
||||
|
|
||||
|
class CouponPartner(models.Model): |
||||
|
_name = 'partner.coupon' |
||||
|
|
||||
|
partner_id = fields.Many2one('res.partner', string="Partner") |
||||
|
coupon = fields.Char(string="Coupon Applied") |
||||
|
number = fields.Integer(string="Number of Times Used") |
||||
|
|
||||
|
|
||||
|
class PartnerExtended(models.Model): |
||||
|
_inherit = 'res.partner' |
||||
|
|
||||
|
applied_coupon = fields.One2many('partner.coupon', 'partner_id', string="Coupons Applied") |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 23 KiB |
@ -0,0 +1,140 @@ |
|||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">Website Coupon</h2> |
||||
|
<h3 class="oe_slogan">..Manage Your Coupon Codes Simply..</h3> |
||||
|
<h4 class="oe_slogan">Cybrosys Technologies , www.cybrosys.com</h4> |
||||
|
<div> |
||||
|
<p class='oe_mt32' style="text-align: center;"> |
||||
|
This module by Cybrosys Technologies allows us to manage our customers in a better way by providing |
||||
|
discount coupons to our special customers, and thereby increase the sales. |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 style="color:#875A7B;">Features</h2> |
||||
|
<div class="oe_span6 text-justify oe_mt32"> |
||||
|
<p class="oe_mb32" style="margin-left:48px;"> |
||||
|
☛ Create and configure vouchers for providing a discount. |
||||
|
</p> |
||||
|
<p class="oe_mb32" style="margin-left:48px;"> |
||||
|
☛ Generate a unique code for each coupon. |
||||
|
</p> |
||||
|
<p class="oe_mb32" style="margin-left:48px;"> |
||||
|
☛ Limit the usage of coupons by each user. |
||||
|
</p> |
||||
|
<p class="oe_mb32" style="margin-left:48px;"> |
||||
|
☛ Provide a validity for the coupons. |
||||
|
</p> |
||||
|
<p class="oe_mb32" style="margin-left:48px;"> |
||||
|
☛ History of coupons used by each customer. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h3 class="oe_slogan">Enable the voucher option from the website.</h3> |
||||
|
<div class="oe_demo oe_screenshot"> |
||||
|
<img src="enable_voucher.png"> |
||||
|
</div> |
||||
|
<p class="oe_mt32" style="margin-left:48px;"> |
||||
|
When we added some product to our cart, under the 'Customize' menu, we can see the 'Voucher Code' option. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h3 class="oe_slogan">Apply the coupon by providing the secret code.</h3> |
||||
|
<div class="oe_demo oe_screenshot"> |
||||
|
<img src="apply_coupon.png"> |
||||
|
</div> |
||||
|
<p class="oe_mt32" style="margin-left:48px;"> |
||||
|
After enabling the 'Voucher Code' option, we can enter our coupon code. If that code is valid, |
||||
|
it will be applied to the order. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h3 class="oe_slogan">Create and configure vouchers.</h3> |
||||
|
<div class="oe_demo oe_screenshot"> |
||||
|
<img src="voucher.png"> |
||||
|
</div> |
||||
|
<p class="oe_mt32" style="margin-left:48px;"> |
||||
|
For creating a voucher, we need to specify a product, that means, this voucher will be applicable only |
||||
|
if the customer has selected this product in his order. The minimum and maximum voucher values can be set here. |
||||
|
The expiry date indicates the validity of this voucher. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h3 class="oe_slogan">Create and configure coupons and codes.</h3> |
||||
|
<div class="oe_demo oe_screenshot"> |
||||
|
<img src="coupon.png"> |
||||
|
</div> |
||||
|
<p class="oe_mt32" style="margin-left:48px;"> |
||||
|
When we create the coupon, a unique, auto-generated and editable code will be there for each coupon. There are mainly |
||||
|
two types of coupons, fixed and percentage. The fixed type is used to deduct a fixed amount from the order. The |
||||
|
percentage type will deduct a certain percentage of amount from the order. |
||||
|
</p> |
||||
|
<p class="oe_mt32" style="margin-left:48px;">The total number of available coupons |
||||
|
and the number of times one user can use this coupon can be set here. It is also possible to limit this coupon to a single customer, |
||||
|
i.e, only one customer can use this coupon. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h3 class="oe_slogan">Coupon History.</h3> |
||||
|
<div class="oe_demo oe_screenshot"> |
||||
|
<img src="history.png"> |
||||
|
</div> |
||||
|
<p class="oe_mt32" style="margin-left:48px;"> |
||||
|
Under the 'Coupon History' menu, we can see the details of coupons used by all the customers. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
||||
|
<div class="oe_slogan" style="margin-top:10px !important;"> |
||||
|
<div> |
||||
|
<a class="btn btn-primary btn-lg mt8" |
||||
|
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i |
||||
|
class="fa fa-envelope"></i> Email </a> <a |
||||
|
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
||||
|
href="http://www.cybrosys.com/contact/"><i |
||||
|
class="fa fa-phone"></i> Contact Us </a> <a |
||||
|
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
||||
|
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
||||
|
class="fa fa-check-square"></i> Request Customization </a> |
||||
|
</div> |
||||
|
<br> |
||||
|
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
||||
|
<div> |
||||
|
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
||||
|
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
||||
|
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
||||
|
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
||||
|
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
After Width: | Height: | Size: 70 KiB |
@ -0,0 +1,46 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<record id="applied_coupons_view" model="ir.ui.view"> |
||||
|
<field name="name">applied_coupons_form</field> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="inherit_id" ref="base.view_partner_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//page[@name='sales_purchases']" position="after"> |
||||
|
<page name="coupon_applied" string="Applied Coupons"> |
||||
|
<field name="applied_coupon" readonly="1"> |
||||
|
<tree> |
||||
|
<field name="partner_id" invisible="1"/> |
||||
|
<field name="coupon"/> |
||||
|
<field name="number"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</page> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="gift_coupon_history_tree" model="ir.ui.view"> |
||||
|
<field name="name">Gift Coupon History</field> |
||||
|
<field name="model">partner.coupon</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="partner_id" /> |
||||
|
<field name="coupon" /> |
||||
|
<field name="number" /> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_gift_coupon_history" model="ir.actions.act_window"> |
||||
|
<field name="name">Gift Coupons History</field> |
||||
|
<field name="res_model">partner.coupon</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_id" ref="gift_coupon_history_tree"/> |
||||
|
<field name="view_mode">tree</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem name="Coupon History" id="gift_coupon_history" action="action_gift_coupon_history" parent="website_coupon.gift_coupon_main"/> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,121 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<record id="gift_voucher_form" model="ir.ui.view"> |
||||
|
<field name="name">Gift Voucher</field> |
||||
|
<field name="model">gift.voucher</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="name" /> |
||||
|
<field name="product_id" /> |
||||
|
<field name="min_value" /> |
||||
|
<field name="max_value" /> |
||||
|
<field name="expiry_date" /> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="gift_voucher_tree" model="ir.ui.view"> |
||||
|
<field name="name">Gift Voucher</field> |
||||
|
<field name="model">gift.voucher</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name" /> |
||||
|
<field name="product_id" /> |
||||
|
<field name="min_value" /> |
||||
|
<field name="max_value" /> |
||||
|
<field name="expiry_date" /> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="gift_coupon_form" model="ir.ui.view"> |
||||
|
<field name="name">Gift Coupon</field> |
||||
|
<field name="model">gift.coupon</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<div class="oe_title"> |
||||
|
<label for="name" string="Name" /> |
||||
|
<h1> |
||||
|
<field name="name"/> |
||||
|
</h1> |
||||
|
</div> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="code" /> |
||||
|
<field name="start_date" /> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="voucher" /> |
||||
|
<field name="end_date" /> |
||||
|
</group> |
||||
|
</group> |
||||
|
<group string="Conditions"> |
||||
|
<group> |
||||
|
<field name="total_avail" /> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="partner_id" /> |
||||
|
<field name="limit" /> |
||||
|
</group> |
||||
|
</group> |
||||
|
<group string="Pricing"> |
||||
|
<group> |
||||
|
<field name="voucher_val" /> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="type" /> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="gift_coupon_tree" model="ir.ui.view"> |
||||
|
<field name="name">Gift Coupon</field> |
||||
|
<field name="model">gift.coupon</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name" /> |
||||
|
<field name="code" /> |
||||
|
<field name="voucher" /> |
||||
|
<field name="start_date" /> |
||||
|
<field name="end_date" /> |
||||
|
<field name="partner_id" /> |
||||
|
<field name="total_avail" /> |
||||
|
<field name="type" /> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_gift_voucher" model="ir.actions.act_window"> |
||||
|
<field name="name">Gift Vouchers</field> |
||||
|
<field name="res_model">gift.voucher</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_id" ref="gift_voucher_tree"/> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_gift_coupon" model="ir.actions.act_window"> |
||||
|
<field name="name">Generate Gift Coupons</field> |
||||
|
<field name="res_model">gift.coupon</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_id" ref="gift_coupon_tree"/> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem name="Gift Voucher" id="gift_voucher" action="action_gift_voucher" parent="sales_team.menu_sale_config"/> |
||||
|
<menuitem name="Gift Coupons" id="gift_coupon_main" parent="sales_team.menu_base_partner"/> |
||||
|
<menuitem name="Gift Coupon" id="gift_coupon" action="action_gift_coupon" parent="gift_coupon_main"/> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,89 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
|
<odoo> |
||||
|
<template id="voucher_code" inherit_id="website_sale.cart" active="False" customize_show="True" name="Voucher Code"> |
||||
|
<xpath expr="//div[@id='right_column']" position="inside"> |
||||
|
<h4>Voucher Code</h4> |
||||
|
<p> |
||||
|
Have a voucher code? Fill this field and apply. |
||||
|
</p> |
||||
|
<t t-if="coupon_not_available"> |
||||
|
<p class="bg-warning">This gift code is not available</p> |
||||
|
</t> |
||||
|
<form t-if="website_sale_order and website_sale_order.website_order_line" action="/shop/gift_coupon" method="post" class="mb32"> |
||||
|
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" /> |
||||
|
<div class="input-group"> |
||||
|
<input name="promo_voucher" class="form-control" type="text" placeholder="code..." t-att-value="website_sale_order.pricelist_id.code or None" /> |
||||
|
<div class="input-group-btn"> |
||||
|
<a class="btn btn-default a-submit">Apply</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</form> |
||||
|
</xpath> |
||||
|
</template> |
||||
|
|
||||
|
<template id="cart_lines_extended" inherit_id="website_sale.cart_lines"> |
||||
|
<xpath expr="//table[@id='cart_products']" position="replace"> |
||||
|
<table class="table table-striped table-condensed js_cart_lines" id="cart_products" t-if="website_sale_order and website_sale_order.website_order_line"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th width="100">Product</th> |
||||
|
<th></th> |
||||
|
<th width="130" class="text-center">Quantity</th> |
||||
|
<th width="100" class="text-center">Price</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<t t-foreach="website_sale_order.website_order_line" t-as="line"> |
||||
|
<tr> |
||||
|
<td colspan="2" t-if="not line.product_id.product_tmpl_id"></td> |
||||
|
<td align="center" t-if="line.product_id.product_tmpl_id"> |
||||
|
<span t-field="line.product_id.image_small" t-options="{'widget': 'image', 'class': 'img-rounded'}" /> |
||||
|
</td> |
||||
|
<td t-if="line.product_id.product_tmpl_id"> |
||||
|
<div> |
||||
|
<a t-attf-href="/shop/product/#{ slug(line.product_id.product_tmpl_id) }"> |
||||
|
<strong t-esc="line.product_id.with_context(display_default_code=False).display_name" /> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="text-muted"> |
||||
|
<t t-foreach="line.name.splitlines()[1:]" t-as="name_line"> |
||||
|
<span><t t-esc="name_line"/></span><br/> |
||||
|
</t> |
||||
|
</div> |
||||
|
<t t-if="line.product_id.display_name != 'Gift Coupon'"> |
||||
|
<a href='#' class='js_delete_product no-decoration'> <small><i class='fa fa-trash-o'></i> Remove</small></a> |
||||
|
</t> |
||||
|
</td> |
||||
|
<td class="text-center" id="td-qty"> |
||||
|
<t t-if="line.product_id.display_name == 'Gift Coupon'"> |
||||
|
<a href='#' class='js_delete_product no-decoration'> <small><i class='fa fa-trash-o'></i> Remove</small></a> |
||||
|
<div class="input-group oe_website_spinner"> |
||||
|
<input type="hidden" class="js_quantity form-control" t-att-data-line-id="line.id" t-att-data-product-id="line.product_id.id" t-att-value="int(line.product_uom_qty)" /> |
||||
|
</div> |
||||
|
</t> |
||||
|
<t t-if="line.product_id.display_name != 'Gift Coupon'"> |
||||
|
<div class="input-group oe_website_spinner"> |
||||
|
<a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json" data-no-instant=""> |
||||
|
<i class="fa fa-minus"></i> |
||||
|
</a> |
||||
|
<input type="text" class="js_quantity form-control" t-att-data-line-id="line.id" t-att-data-product-id="line.product_id.id" t-att-value="int(line.product_uom_qty)" /> |
||||
|
<a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json" data-no-instant=""> |
||||
|
<i class="fa fa-plus"></i> |
||||
|
</a> |
||||
|
</div> |
||||
|
</t> |
||||
|
</td> |
||||
|
<td class="text-center" id="td-price" name="price"> |
||||
|
<t t-if="(compute_currency(line.product_id.lst_price) - line.price_reduce ) > 0.01 and website.get_current_pricelist().discount_policy=='without_discount'"> |
||||
|
<del t-attf-class="#{'text-danger mr8'}" style="white-space: nowrap;" t-esc="compute_currency(line.product_id.website_public_price)" t-options="{'widget': 'monetary', 'display_currency': website.get_current_pricelist().currency_id, 'from_currency': website.currency_id}" /> |
||||
|
</t> |
||||
|
<span t-field="line.price_reduce_taxexcl" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'from_currency': website_sale_order.pricelist_id.currency_id, 'display_currency': website.currency_id}" groups="sale.group_show_price_subtotal" /> |
||||
|
<span t-field="line.price_reduce_taxinc" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'from_currency': website_sale_order.pricelist_id.currency_id, 'display_currency': website.currency_id}" groups="sale.group_show_price_total" /> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</t> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</xpath> |
||||
|
</template> |
||||
|
</odoo> |