From 6607a679d1b14450d5380534184a862c2aba869b Mon Sep 17 00:00:00 2001 From: Abdurrahman Saber Date: Thu, 17 Apr 2025 12:27:29 +0200 Subject: [PATCH] [IMP] ensan_website_sale: product item gifting --- .../ensan_sale_management/__manifest__.py | 3 +- .../ensan_sale_management/models/__init__.py | 1 + .../models/sale_order.py | 106 ++++++++---- .../models/sale_report.py | 26 +++ .../views/sale_order_views.xml | 123 ++++++++++++- .../views/sale_report.xml | 31 ++++ .../ensan_website_sale/__init__.py | 1 + .../ensan_website_sale/controllers/main.py | 41 +++-- .../ensan_website_sale/models/__init__.py | 3 + .../models/ir_http.py | 0 .../static/src/js/checkout.js | 2 +- .../static/src/js/gift.js | 5 +- .../static/src/scss/gift_popup.scss | 0 .../ensan_website_sale/views/assets.xml | 2 + .../ensan_website_sale/views/templates.xml | 123 +++++++++++-- odex25_donation/p_donation_gift/LICENSE | 27 --- odex25_donation/p_donation_gift/__init__.py | 4 - .../p_donation_gift/__manifest__.py | 29 ---- .../p_donation_gift/controllers/__init__.py | 1 - .../p_donation_gift/controllers/main.py | 16 -- .../p_donation_gift/description/icon.png | Bin 34345 -> 0 bytes .../p_donation_gift/i18n/ar_001.po | 162 ------------------ .../p_donation_gift/models/__init__.py | 3 - .../p_donation_gift/models/product.py | 13 -- .../p_donation_gift/models/sale.py | 66 ------- .../p_donation_gift/models/sale_report.py | 27 --- .../p_donation_gift/views/sale_view.xml | 149 ---------------- .../views/website_template.xml | 136 --------------- .../models/models.py | 1 - .../views/templates.xml | 4 +- 30 files changed, 392 insertions(+), 713 deletions(-) create mode 100644 odex25_donation/ensan_sale_management/models/sale_report.py create mode 100644 odex25_donation/ensan_sale_management/views/sale_report.xml create mode 100644 odex25_donation/ensan_website_sale/models/__init__.py rename odex25_donation/{p_donation_gift => ensan_website_sale}/models/ir_http.py (100%) rename odex25_donation/{p_donation_gift => ensan_website_sale}/static/src/js/gift.js (96%) rename odex25_donation/{p_donation_gift => ensan_website_sale}/static/src/scss/gift_popup.scss (100%) delete mode 100644 odex25_donation/p_donation_gift/LICENSE delete mode 100644 odex25_donation/p_donation_gift/__init__.py delete mode 100644 odex25_donation/p_donation_gift/__manifest__.py delete mode 100644 odex25_donation/p_donation_gift/controllers/__init__.py delete mode 100644 odex25_donation/p_donation_gift/controllers/main.py delete mode 100644 odex25_donation/p_donation_gift/description/icon.png delete mode 100644 odex25_donation/p_donation_gift/i18n/ar_001.po delete mode 100644 odex25_donation/p_donation_gift/models/__init__.py delete mode 100644 odex25_donation/p_donation_gift/models/product.py delete mode 100644 odex25_donation/p_donation_gift/models/sale.py delete mode 100644 odex25_donation/p_donation_gift/models/sale_report.py delete mode 100644 odex25_donation/p_donation_gift/views/sale_view.xml delete mode 100644 odex25_donation/p_donation_gift/views/website_template.xml diff --git a/odex25_donation/ensan_sale_management/__manifest__.py b/odex25_donation/ensan_sale_management/__manifest__.py index 5044c11d1..feeec54fa 100644 --- a/odex25_donation/ensan_sale_management/__manifest__.py +++ b/odex25_donation/ensan_sale_management/__manifest__.py @@ -12,6 +12,7 @@ 'security/ir.model.access.csv', 'data/sms_data.xml', 'views/sale_order_views.xml', - 'views/product_views.xml' + 'views/product_views.xml', + 'views/sale_report.xml', ], } diff --git a/odex25_donation/ensan_sale_management/models/__init__.py b/odex25_donation/ensan_sale_management/models/__init__.py index bd901bd44..b946b94e4 100644 --- a/odex25_donation/ensan_sale_management/models/__init__.py +++ b/odex25_donation/ensan_sale_management/models/__init__.py @@ -1,2 +1,3 @@ from . import sale_order from . import product +from . import sale_report diff --git a/odex25_donation/ensan_sale_management/models/sale_order.py b/odex25_donation/ensan_sale_management/models/sale_order.py index 6de215165..b9522ed21 100644 --- a/odex25_donation/ensan_sale_management/models/sale_order.py +++ b/odex25_donation/ensan_sale_management/models/sale_order.py @@ -1,7 +1,31 @@ from odoo import models, fields, api from odoo.tools.json import scriptsafe as json_scriptsafe - +def check_mobile_number_validation(phone): + if phone[0] == '+' and phone[1] != '0': + if phone[1:4] == '966': + if len(phone[4:]) >= 8: + return phone + else: + phone = phone[0] + '966' + phone[1:] + elif phone[0] == '+' and phone[1] == '0': + phone = phone[0] + '966' + phone[2:] + elif phone[0] == '0' and phone[1] == '5': + phone = '+966' + phone[1:] + elif phone[0:2] == '00': # 00966555555555 + if phone[2:5] == '966': + phone = '+' + '966' + phone[5:] + elif phone[0] == '0': # 0966555555555 + if phone[1:4] == '966': + phone = '+' + '966' + phone[4:] + else: + if phone[0:3] == '966': + phone = '+' + phone + else: + phone = '+' + '966' + phone + return phone + + class SaleOrder_Inherit(models.Model): _inherit = 'sale.order' @@ -10,54 +34,44 @@ class SaleOrder_Inherit(models.Model): order_name = fields.Char("Donor Name") sale_order_portal_url = fields.Char("Sale Order Url", compute="get_sale_order_portal_url") donators_ids = fields.One2many('sale.order.extra_donators', 'sale_id', string="Donators", store=True, readonly=True) + is_gift = fields.Boolean("Is Gift Product?", store=True, compute="compute_gift_order") + first_receiver_number = fields.Char("Receiver Number", compute="_compute_receiver_details", store=True) + first_receiver_name = fields.Char("Receiver Name", compute="_compute_receiver_details", store=True) def get_sale_order_portal_url(self): for sale in self: sale.sale_order_portal_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + sale.get_portal_url() - def check_mobile_number_validation(self, phone): - if phone[0] == '+' and phone[1] != '0': - if phone[1:4] == '966': - if len(phone[4:]) >= 8: - return phone - else: - phone = phone[0] + '966' + phone[1:] - elif phone[0] == '+' and phone[1] == '0': - phone = phone[0] + '966' + phone[2:] - elif phone[0] == '0' and phone[1] == '5': - phone = '+966' + phone[1:] - elif phone[0:2] == '00': # 00966555555555 - if phone[2:5] == '966': - phone = '+' + '966' + phone[5:] - elif phone[0] == '0': # 0966555555555 - if phone[1:4] == '966': - phone = '+' + '966' + phone[4:] - else: - if phone[0:3] == '966': - phone = '+' + phone - else: - phone = '+' + '966' + phone - return phone - def _cart_update(self, *args, **kwargs): res = super(SaleOrder_Inherit, self)._cart_update(*args, **kwargs) + order_line = self.env['sale.order.line'].browse(res.get('line_id')) qty = kwargs.get('add_qty', False) or kwargs.get('set_qty', False) + if qty and order_line: self.convert_donation_qty_to_price(order_line, qty) + if 'donators_ids' in kwargs: order_line = self.env['sale.order.line'].browse(res.get('line_id')).sudo() order_line.extra_donators_ids.sudo().unlink() extra_donators_ids = [] + gift_sender_name = None + gift_sender_mobile = None for i in json_scriptsafe.loads(kwargs.get('donators_ids')): extra_donators_ids.append((0, 0, { 'sale_id': order_line.order_id.id, 'product_id': int(i.get('product_id')), 'donated_amount': float(i.get('donated_amount')), 'donator_name': i.get('donator_name'), - 'donator_mobile_number': self.check_mobile_number_validation(i.get('donator_mobile_number')).replace('+', '') + 'donator_mobile_number': check_mobile_number_validation(i.get('donator_mobile_number')).replace('+', '') })) + gift_sender_name = i.get("gift_sender_name") + gift_sender_mobile = i.get("gift_sender_mobile") order_line.extra_donators_ids = extra_donators_ids + if gift_sender_name: + self.order_name = gift_sender_name + if gift_sender_mobile: + self.order_mobile_number = gift_sender_mobile return res def convert_donation_qty_to_price(self, order_line, qty): @@ -86,6 +100,29 @@ class SaleOrder_Inherit(models.Model): sms_numbers=[donator.donator_mobile_number] ) return call_super + + @api.depends('donators_ids') + def _compute_receiver_details(self): + for rec in self: + first_receiver_number = '' + first_receiver_name = '' + if rec.donators_ids: + gift_donators_id = rec.donators_ids.filtered(lambda l:l.product_id.product_tmpl_id.is_gift) + if not gift_donators_id: + gift_donators_id = rec.donators_ids + gift_donators_id = gift_donators_id[0] + first_receiver_number = gift_donators_id.donator_mobile_number + first_receiver_name = gift_donators_id.donator_name + rec.first_receiver_number = first_receiver_number + rec.first_receiver_name = first_receiver_name + + @api.depends('order_line.is_gift') + def compute_gift_order(self): + for rec in self: + if rec.order_line.filtered(lambda l: l.is_gift): + rec.is_gift = True + else: + rec.is_gift = False class ExtraDonators(models.Model): @@ -100,16 +137,17 @@ class ExtraDonators(models.Model): sale_id = fields.Many2one("sale.order", string="Sale Order", ondelete='cascade') product_id = fields.Many2one('product.product', string="Product", ondelete='cascade') - - class SaleOrderLineInherit(models.Model): _inherit = 'sale.order.line' extra_donators_ids = fields.One2many('sale.order.extra_donators', 'line_id') + is_gift = fields.Boolean("Is Gift Product?", store=True) + + @api.model_create_multi + def create(self, vals_list): + call_super = super(SaleOrderLineInherit, self).create(vals_list) + for line in call_super: + if line.product_id: + line.is_gift = line.product_id.is_gift + return call_super - @api.depends('product_id', 'product_uom', 'product_uom_qty') - def _compute_price_unit(self): - for line in self: - if line.product_id and line.product_id.is_donation and line.product_id.donation_type == 'Free Amount': - continue - super(SaleOrderLineInherit, line)._compute_price_unit() diff --git a/odex25_donation/ensan_sale_management/models/sale_report.py b/odex25_donation/ensan_sale_management/models/sale_report.py new file mode 100644 index 000000000..22d8ba215 --- /dev/null +++ b/odex25_donation/ensan_sale_management/models/sale_report.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from odoo import fields, models + + +class SaleReport(models.Model): + _inherit = "sale.report" + + is_gift = fields.Boolean("Order Contains Gift", readonly=True) + first_receiver_number = fields.Char("Receiver Number", readonly=True) + first_receiver_name = fields.Char("Receiver Name", readonly=True) + order_mobile_number = fields.Char("Donor Number", readonly=True) + order_name = fields.Char("Donor Name", readonly=True) + + def _select_additional_fields(self, fields): + fields['is_gift'] = ", s.is_gift" + fields['first_receiver_number'] = ", s.first_receiver_number" + fields['first_receiver_name'] = ", s.first_receiver_name" + fields['order_mobile_number'] = ", s.order_mobile_number" + fields['order_name'] = ", s.order_name" + return super()._select_additional_fields(fields) + + def _group_by_sale(self, groupby=''): + res = super()._group_by_sale(groupby) + res += """, s.is_gift, s.first_receiver_number,s.first_receiver_name,s.order_mobile_number,s.order_name""" + return res + \ No newline at end of file diff --git a/odex25_donation/ensan_sale_management/views/sale_order_views.xml b/odex25_donation/ensan_sale_management/views/sale_order_views.xml index 74e4eee97..b1e35cd0d 100644 --- a/odex25_donation/ensan_sale_management/views/sale_order_views.xml +++ b/odex25_donation/ensan_sale_management/views/sale_order_views.xml @@ -4,26 +4,131 @@ extrafield.sale.order.form.view sale.order - + - - - + + + + - - - - + + + + +
+ + + + + + +
- + + sale.order.list.select + sale.order + + + + + + + + + + + + + + + + + + + + + + + + + + Group By Gift Sender Number + sale.order + [('is_gift', '=', True)] + + {'group_by': ['order_mobile_number']} + + + Group By Gift Sender Name + sale.order + [('is_gift', '=', True)] + + {'group_by': ['order_name']} + + + Group By Gift Receiver Number + sale.order + [('is_gift', '=', True)] + + {'group_by': ['first_receiver_number']} + + + Group By Gift Receiver Name + sale.order + [('is_gift', '=', True)] + + {'group_by': ['first_receiver_name']} + + + + + Group By Gift Sender Number + sale.report + [('is_gift', '=', True)] + + {'group_by': ['order_mobile_number']} + + + Group By Gift Sender Name + sale.report + [('is_gift', '=', True)] + + {'group_by': ['order_name']} + + + Group By Gift Receiver Number + sale.report + [('is_gift', '=', True)] + + {'group_by': ['first_receiver_number']} + + + Group By Gift Receiver Name + sale.report + [('is_gift', '=', True)] + + {'group_by': ['first_receiver_name']} + + + \ No newline at end of file diff --git a/odex25_donation/ensan_sale_management/views/sale_report.xml b/odex25_donation/ensan_sale_management/views/sale_report.xml new file mode 100644 index 000000000..e590947b0 --- /dev/null +++ b/odex25_donation/ensan_sale_management/views/sale_report.xml @@ -0,0 +1,31 @@ + + + + + sale.report.form.view + sale.report + + + + + + + + + + + + + + + + + + + + + diff --git a/odex25_donation/ensan_website_sale/__init__.py b/odex25_donation/ensan_website_sale/__init__.py index e046e49fb..91c5580fe 100644 --- a/odex25_donation/ensan_website_sale/__init__.py +++ b/odex25_donation/ensan_website_sale/__init__.py @@ -1 +1,2 @@ from . import controllers +from . import models diff --git a/odex25_donation/ensan_website_sale/controllers/main.py b/odex25_donation/ensan_website_sale/controllers/main.py index 7175798b2..3a6aca9f2 100644 --- a/odex25_donation/ensan_website_sale/controllers/main.py +++ b/odex25_donation/ensan_website_sale/controllers/main.py @@ -13,28 +13,31 @@ _logger = logging.getLogger(__name__) class WebsiteSaleExtended(WebsiteSale): - @http.route() - def cart_update(self, product_id, add_qty=1, set_qty=0, **kw): - res = super(WebsiteSaleExtended, self).cart_update(product_id, add_qty=add_qty, set_qty=set_qty, **kw) - sale_order = request.website.sale_get_order() + # @http.route() + # def cart_update(self, product_id, add_qty=1, set_qty=0, **kw): + # res = super(WebsiteSaleExtended, self).cart_update(product_id, add_qty=add_qty, set_qty=set_qty, **kw) + # sale_order = request.website.sale_get_order() - product_custom_attribute_values = None - if kw.get('product_custom_attribute_values'): - product_custom_attribute_values = json.loads(kw.pop('product_custom_attribute_values')) + # product_custom_attribute_values = None + # if kw.get('product_custom_attribute_values'): + # product_custom_attribute_values = json.loads(kw.pop('product_custom_attribute_values')) - no_variant_attribute_values = None - if kw.get('no_variant_attribute_values'): - no_variant_attribute_values = json.loads(kw.pop('no_variant_attribute_values')) + # no_variant_attribute_values = None + # if kw.get('no_variant_attribute_values'): + # no_variant_attribute_values = json.loads(kw.pop('no_variant_attribute_values')) - sale_order._cart_update( - product_id=int(product_id), - add_qty=add_qty, - set_qty=set_qty, - product_custom_attribute_values=product_custom_attribute_values, - no_variant_attribute_values=no_variant_attribute_values, - **kw - ) - return res + # sale_order._cart_update( + # product_id=int(product_id), + # add_qty=0, + # set_qty=set_qty, + # product_custom_attribute_values=product_custom_attribute_values, + # no_variant_attribute_values=no_variant_attribute_values, + # **kw + # ) + # gift_redirect = 'gift_redirect' in kw and kw.pop('gift_redirect') or False + # if gift_redirect: + # return request.redirect("/shop/payment") + # return res @http.route() def checkout(self, **post): diff --git a/odex25_donation/ensan_website_sale/models/__init__.py b/odex25_donation/ensan_website_sale/models/__init__.py new file mode 100644 index 000000000..c97c56b7d --- /dev/null +++ b/odex25_donation/ensan_website_sale/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import ir_http \ No newline at end of file diff --git a/odex25_donation/p_donation_gift/models/ir_http.py b/odex25_donation/ensan_website_sale/models/ir_http.py similarity index 100% rename from odex25_donation/p_donation_gift/models/ir_http.py rename to odex25_donation/ensan_website_sale/models/ir_http.py diff --git a/odex25_donation/ensan_website_sale/static/src/js/checkout.js b/odex25_donation/ensan_website_sale/static/src/js/checkout.js index 277ccbbcd..4c4fa3b95 100644 --- a/odex25_donation/ensan_website_sale/static/src/js/checkout.js +++ b/odex25_donation/ensan_website_sale/static/src/js/checkout.js @@ -12,7 +12,7 @@ odoo.define('ensan_website_sale.payment', require => { }, checkMobileNumberFormat: function() { const mobileInput = this.$('#order_mobile_number'); - const mobileRegex = /^(?:(\+966|00966|0)?5[0-9]{8}|5[0-9]{8})$/; + const mobileRegex = /^(?:(\+966|00966|0|966)?5[0-9]{8}|5[0-9]{8})$/; if (mobileRegex.test(mobileInput.val())) { mobileInput.removeClass('is-invalid').addClass('is-valid'); diff --git a/odex25_donation/p_donation_gift/static/src/js/gift.js b/odex25_donation/ensan_website_sale/static/src/js/gift.js similarity index 96% rename from odex25_donation/p_donation_gift/static/src/js/gift.js rename to odex25_donation/ensan_website_sale/static/src/js/gift.js index ad145bb63..cf1f5dad7 100644 --- a/odex25_donation/p_donation_gift/static/src/js/gift.js +++ b/odex25_donation/ensan_website_sale/static/src/js/gift.js @@ -1,8 +1,7 @@ -odoo.define('p_donation_gift.gift', function (require) { +odoo.define('ensan_website_sale.gift', function (require) { "use strict"; require('web.dom_ready'); - require('p_donation_theme.product-gift-card'); var publicWidget = require('web.public.widget'); const { _t } = require('web.core'); @@ -114,7 +113,7 @@ odoo.define('p_donation_gift.gift', function (require) { gift_sender_name: gift_sender_name, gift_sender_mobile: gift_sender_number }) - gift_form.find('input[name=donate_list]').val(JSON.stringify(gift_box_list)) + gift_form.find('input[name=donators_ids]').val(JSON.stringify(gift_box_list)) gift_form.find('input[name=gift_redirect]').val('/shop/payment') gift_form.find('button[type=submit]').click() }) diff --git a/odex25_donation/p_donation_gift/static/src/scss/gift_popup.scss b/odex25_donation/ensan_website_sale/static/src/scss/gift_popup.scss similarity index 100% rename from odex25_donation/p_donation_gift/static/src/scss/gift_popup.scss rename to odex25_donation/ensan_website_sale/static/src/scss/gift_popup.scss diff --git a/odex25_donation/ensan_website_sale/views/assets.xml b/odex25_donation/ensan_website_sale/views/assets.xml index d34bdaef9..cea2b1963 100644 --- a/odex25_donation/ensan_website_sale/views/assets.xml +++ b/odex25_donation/ensan_website_sale/views/assets.xml @@ -5,11 +5,13 @@ + @@ -1116,6 +1119,13 @@ aria-label="Donate Now"> Donate Now + + + @@ -1133,4 +1143,97 @@ + + \ No newline at end of file diff --git a/odex25_donation/p_donation_gift/LICENSE b/odex25_donation/p_donation_gift/LICENSE deleted file mode 100644 index 7a5c68e71..000000000 --- a/odex25_donation/p_donation_gift/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Odoo Proprietary License v1.0 - -This software and associated files (the "Software") may only be used (executed, -modified, executed after modifications) if you have purchased a valid license -from the authors, typically via Odoo Apps, or if you have received a written -agreement from the authors of the Software (see the COPYRIGHT file). - -You may develop Odoo modules that use the Software as a library (typically -by depending on it, importing it and using its resources), but without copying -any source code or material from the Software. You may distribute those -modules under the license of your choice, provided that this license is -compatible with the terms of the Odoo Proprietary License (For example: -LGPL, MIT, or proprietary licenses similar to this one). - -It is forbidden to publish, distribute, sublicense, or sell copies of the Software -or modified copies of the Software. - -The above copyright notice and this permission notice must be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/odex25_donation/p_donation_gift/__init__.py b/odex25_donation/p_donation_gift/__init__.py deleted file mode 100644 index 511a0ca3a..000000000 --- a/odex25_donation/p_donation_gift/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import controllers -from . import models \ No newline at end of file diff --git a/odex25_donation/p_donation_gift/__manifest__.py b/odex25_donation/p_donation_gift/__manifest__.py deleted file mode 100644 index 44abab7e7..000000000 --- a/odex25_donation/p_donation_gift/__manifest__.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -{ - 'name': "GIFT Feature on donation platform", - 'summary': 'GIFT Feature on donation platform', - 'description': 'this module adds GIFT Feature in Ensan.sa interface', - 'author': 'Shah Enterprise', - 'maintainer': 'Shah Enterprise', - 'company': 'Shah Enterprise', - 'website': 'https://shahenterprise.co', - 'price': 600, - 'currency': 'USD', - 'license': 'LGPL-3', - 'category': 'Uncategorized', - 'version': '16.0.1', - 'depends': [ - 'base', 'website_sale', 'theme_prime', 'p_donation_theme' - ], - 'data': [ - 'views/website_template.xml', - 'views/sale_view.xml' - ], - 'assets': { - 'web.assets_frontend': [ - 'p_donation_gift/static/src/js/*.js', - 'p_donation_gift/static/src/scss/*.scss', - # 'p_donation_gift/static/src/xml/gift.xml', - ], - } -} diff --git a/odex25_donation/p_donation_gift/controllers/__init__.py b/odex25_donation/p_donation_gift/controllers/__init__.py deleted file mode 100644 index deec4a8b8..000000000 --- a/odex25_donation/p_donation_gift/controllers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import main \ No newline at end of file diff --git a/odex25_donation/p_donation_gift/controllers/main.py b/odex25_donation/p_donation_gift/controllers/main.py deleted file mode 100644 index 9fcd2eeaa..000000000 --- a/odex25_donation/p_donation_gift/controllers/main.py +++ /dev/null @@ -1,16 +0,0 @@ -from odoo import http, _ -from odoo.addons.website_sale.controllers.main import WebsiteSale -from odoo.http import request - -class WebsiteSale_Cart(WebsiteSale): - - @http.route(['/shop/cart/update'], type='http', auth="public", methods=['POST'], website=True) - def cart_update( - self, product_id, add_qty=1, set_qty=0, - product_custom_attribute_values=None, no_variant_attribute_values=None, - express=False, **kwargs): - gift_redirect = 'gift_redirect' in kwargs and kwargs.pop('gift_redirect') or False - call_super = super(WebsiteSale_Cart, self).cart_update(product_id, add_qty, set_qty, product_custom_attribute_values, no_variant_attribute_values, express, **kwargs) - if gift_redirect: - return request.redirect("/shop/payment") - return call_super \ No newline at end of file diff --git a/odex25_donation/p_donation_gift/description/icon.png b/odex25_donation/p_donation_gift/description/icon.png deleted file mode 100644 index 392838e0c678fbe010e22d735fb8d772f8dbb9f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34345 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
a-1S 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 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "05xxxxxxxx" -msgstr "" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "Close" -msgstr "" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "Dedicate Now" -msgstr "تبرع الان" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "Donate on behalf of your family or friends" -msgstr "اهدٍ من احببت اجرًا" - -#. module: p_donation_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_report__order_name -msgid "Donor Name" -msgstr "اسم المهدي" - -#. module: p_donation_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_report__order_mobile_number -msgid "Donor Number" -msgstr "رقم جوال المهدي" - -#. module: p_donation_gift -#: model:ir.model,name:p_donation_gift.model_ir_http -msgid "HTTP Routing" -msgstr "مسار HTTP" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "Invalid Name!" -msgstr "الاسم خطأ" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "Invalid Number! It Should start with 05 and minimum length 10" -msgstr "رقم الجوال خطأ، الصيغة الصحيحة" - -#. module: p_donation_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_product_product__is_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_product_template__is_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_order__is_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_order_line__is_gift -msgid "Is Gift Product?" -msgstr "" - -#. module: p_donation_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_report__is_gift -msgid "Order Contains Gift" -msgstr "" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.sale_report_view_search_website -#: model_terms:ir.ui.view,arch_db:p_donation_gift.view_order_form -#: model_terms:ir.ui.view,arch_db:p_donation_gift.view_sales_order_filter -msgid "Order Contains Gift?" -msgstr "" - -#. module: p_donation_gift -#: model:ir.model,name:p_donation_gift.model_product_template -msgid "Product" -msgstr "المنتج" - -#. module: p_donation_gift -#: model:ir.model,name:p_donation_gift.model_product_product -msgid "Product Variant" -msgstr "متغير المنتج " - -#. module: p_donation_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_order__first_receiver_name -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_report__first_receiver_name -#: model_terms:ir.ui.view,arch_db:p_donation_gift.sale_report_view_search_website -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -#: model_terms:ir.ui.view,arch_db:p_donation_gift.view_sales_order_filter -msgid "Receiver Name" -msgstr "اسم المهدى له" - -#. module: p_donation_gift -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_order__first_receiver_number -#: model:ir.model.fields,field_description:p_donation_gift.field_sale_report__first_receiver_number -#: model_terms:ir.ui.view,arch_db:p_donation_gift.sale_report_view_search_website -#: model_terms:ir.ui.view,arch_db:p_donation_gift.view_sales_order_filter -msgid "Receiver Number" -msgstr "رقم جوال المهدى له" - -#. module: p_donation_gift -#: model:ir.model,name:p_donation_gift.model_sale_report -msgid "Sales Analysis Report" -msgstr "تقرير المبيعات التحليلي" - -#. module: p_donation_gift -#: model:ir.model,name:p_donation_gift.model_sale_order -msgid "Sales Order" -msgstr "أمر البيع" - -#. module: p_donation_gift -#: model:ir.model,name:p_donation_gift.model_sale_order_line -msgid "Sales Order Line" -msgstr "بند أمر المبيعات" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.sale_report_view_search_website -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -#: model_terms:ir.ui.view,arch_db:p_donation_gift.view_sales_order_filter -msgid "Sender Name" -msgstr "اسم المهدي" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.sale_report_view_search_website -#: model_terms:ir.ui.view,arch_db:p_donation_gift.view_sales_order_filter -msgid "Sender Number" -msgstr "رقم جوال المهدي" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "Valid Name!" -msgstr "الاسم صحيح " - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout - -#. module: p_donation_gift -#. odoo-javascript -#: code:addons/p_donation_gift/static/src/js/gift.js:0 -#, python-format -msgid "Please Fill out this field." -msgstr "يرجى ملئ مبلغ التبرع" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "Sender Mobile" -msgstr "رقم جوال المهدي" - -#. module: p_donation_gift -#: model_terms:ir.ui.view,arch_db:p_donation_gift.shop_layout -msgid "Receiver Mobile" -msgstr "رقم جوال المهدى له" \ No newline at end of file diff --git a/odex25_donation/p_donation_gift/models/__init__.py b/odex25_donation/p_donation_gift/models/__init__.py deleted file mode 100644 index d879249ac..000000000 --- a/odex25_donation/p_donation_gift/models/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import sale, product, sale_report, ir_http \ No newline at end of file diff --git a/odex25_donation/p_donation_gift/models/product.py b/odex25_donation/p_donation_gift/models/product.py deleted file mode 100644 index b1ff4e2fe..000000000 --- a/odex25_donation/p_donation_gift/models/product.py +++ /dev/null @@ -1,13 +0,0 @@ -from odoo import models, fields - - -class ProductTemplate_Inherit(models.Model): - _inherit = 'product.template' - - is_gift = fields.Boolean("Is Gift Product?", default=False) - - -class ProductProduct_Inherit(models.Model): - _inherit = 'product.product' - - is_gift = fields.Boolean("Is Gift Product?", related="product_tmpl_id.is_donation") diff --git a/odex25_donation/p_donation_gift/models/sale.py b/odex25_donation/p_donation_gift/models/sale.py deleted file mode 100644 index 55f2425b0..000000000 --- a/odex25_donation/p_donation_gift/models/sale.py +++ /dev/null @@ -1,66 +0,0 @@ -from odoo import models, fields, api -from odoo.tools.json import scriptsafe as json_scriptsafe - - -class SaleOrder_Inherit(models.Model): - _inherit = 'sale.order' - - is_gift = fields.Boolean("Is Gift Product?", store=True, compute="compute_gift_order") - first_receiver_number = fields.Char("Receiver Number", compute="_compute_receiver_details", store=True) - first_receiver_name = fields.Char("Receiver Name", compute="_compute_receiver_details", store=True) - - @api.depends('donators_ids') - def _compute_receiver_details(self): - for rec in self: - first_receiver_number = '' - first_receiver_name = '' - if rec.donators_ids: - gift_donators_id = rec.donators_ids.filtered(lambda l:l.product_id.product_tmpl_id.is_gift) - if not gift_donators_id: - gift_donators_id = rec.donators_ids - gift_donators_id = gift_donators_id[0] - first_receiver_number = gift_donators_id.donator_mobile_number - first_receiver_name = gift_donators_id.donator_name - rec.first_receiver_number = first_receiver_number - rec.first_receiver_name = first_receiver_name - - @api.depends('order_line.is_gift') - def compute_gift_order(self): - for rec in self: - if rec.order_line.filtered(lambda l: l.is_gift): - rec.is_gift = True - else: - rec.is_gift = False - - def _cart_update(self, *args, **kwargs): - donate_list = kwargs.get('donate_list', []) - if donate_list: - donate_list = json_scriptsafe.loads(donate_list) - donate_dict = donate_list[0] - gift_sender_name = donate_dict.get("gift_sender_name") - gift_sender_mobile = donate_dict.get("gift_sender_mobile") - kwargs.pop('donate_list') - kwargs.update({ - 'donators_ids': json_scriptsafe.dumps([donate_dict]) - }) - self.write({ - 'order_mobile_number': gift_sender_mobile, - 'order_name': gift_sender_name - }) - - call_super = super(SaleOrder_Inherit, self)._cart_update(*args, **kwargs) - return call_super - - -class SaleOrderLineInherit(models.Model): - _inherit = 'sale.order.line' - - is_gift = fields.Boolean("Is Gift Product?", store=True) - - @api.model_create_multi - def create(self, vals_list): - call_super = super(SaleOrderLineInherit, self).create(vals_list) - for line in call_super: - if line.product_id: - line.is_gift = line.product_id.is_gift - return call_super diff --git a/odex25_donation/p_donation_gift/models/sale_report.py b/odex25_donation/p_donation_gift/models/sale_report.py deleted file mode 100644 index 021da3f70..000000000 --- a/odex25_donation/p_donation_gift/models/sale_report.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -from odoo import fields, models - - -class SaleReport(models.Model): - _inherit = "sale.report" - - is_gift = fields.Boolean("Order Contains Gift", readonly=True) - first_receiver_number = fields.Char("Receiver Number", readonly=True) - first_receiver_name = fields.Char("Receiver Name", readonly=True) - order_mobile_number = fields.Char("Donor Number", readonly=True) - order_name = fields.Char("Donor Name", readonly=True) - - def _select_additional_fields(self): - res = super()._select_additional_fields() - res['is_gift'] = "s.is_gift" - res['first_receiver_number'] = "s.first_receiver_number" - res['first_receiver_name'] = "s.first_receiver_name" - res['order_mobile_number'] = "s.order_mobile_number" - res['order_name'] = "s.order_name" - return res - - def _group_by_sale(self): - res = super()._group_by_sale() - res += """, - s.is_gift, s.first_receiver_number,s.first_receiver_name,s.order_mobile_number,s.order_name""" - return res diff --git a/odex25_donation/p_donation_gift/views/sale_view.xml b/odex25_donation/p_donation_gift/views/sale_view.xml deleted file mode 100644 index 8dbea2a8f..000000000 --- a/odex25_donation/p_donation_gift/views/sale_view.xml +++ /dev/null @@ -1,149 +0,0 @@ - - - - - product.template.form.inherit - product.template - - - - - - - - - - extrafield.sale.order.form.view - sale.order - - - - - - -
- - - - - - -
-
-
-
- - - sale.report.form.view - sale.report - - - - - - - - - - - - - - - - - - - - - - sale.order.list.select - sale.order - - - - - - - - - - - - - - - - - - - - - - - - - - Group By Gift Sender Number - sale.order - [('is_gift', '=', True)] - - {'group_by': ['order_mobile_number']} - - - Group By Gift Sender Name - sale.order - [('is_gift', '=', True)] - - {'group_by': ['order_name']} - - - Group By Gift Receiver Number - sale.order - [('is_gift', '=', True)] - - {'group_by': ['first_receiver_number']} - - - Group By Gift Receiver Name - sale.order - [('is_gift', '=', True)] - - {'group_by': ['first_receiver_name']} - - - - - Group By Gift Sender Number - sale.report - [('is_gift', '=', True)] - - {'group_by': ['order_mobile_number']} - - - Group By Gift Sender Name - sale.report - [('is_gift', '=', True)] - - {'group_by': ['order_name']} - - - Group By Gift Receiver Number - sale.report - [('is_gift', '=', True)] - - {'group_by': ['first_receiver_number']} - - - Group By Gift Receiver Name - sale.report - [('is_gift', '=', True)] - - {'group_by': ['first_receiver_name']} - -
-
\ No newline at end of file diff --git a/odex25_donation/p_donation_gift/views/website_template.xml b/odex25_donation/p_donation_gift/views/website_template.xml deleted file mode 100644 index b13f8ed75..000000000 --- a/odex25_donation/p_donation_gift/views/website_template.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - Product Item Grid: Donation Style - qweb - - - - - - - - -
- - - - - - margin:5px 0px; #{'width: 100%;' if product.is_gift else ''} - - - - text-align: center !important; - #{'width: 90px;' if not product.is_gift else ''} - - - - - - - - - shop_layout: Donation Style - qweb - p_donation_gift.shop_layout - - - - - - - - - - diff --git a/odex25_donation/website_sale_checkout_limit/models/models.py b/odex25_donation/website_sale_checkout_limit/models/models.py index 447cfdd7e..ff6269e7e 100644 --- a/odex25_donation/website_sale_checkout_limit/models/models.py +++ b/odex25_donation/website_sale_checkout_limit/models/models.py @@ -18,7 +18,6 @@ class Website(models.Model): return False else: return True - elif min_amount_type == 'taxed': taxed_amount = order.amount_total if taxed_amount < float(min_checkout_amount): diff --git a/odex25_donation/website_sale_checkout_limit/views/templates.xml b/odex25_donation/website_sale_checkout_limit/views/templates.xml index 9d117d06b..0ed34eb1e 100644 --- a/odex25_donation/website_sale_checkout_limit/views/templates.xml +++ b/odex25_donation/website_sale_checkout_limit/views/templates.xml @@ -5,7 +5,7 @@ -
+
@@ -18,7 +18,7 @@