From eced81efba75d710d164f1baa2d2e50b4d2d3c18 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Tue, 3 Sep 2024 14:14:40 +0700 Subject: fix bug --- indoteknik_custom/models/sale_order.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 710e99de..348ea4d3 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -109,6 +109,7 @@ class SaleOrder(models.Model): date_driver_departure = fields.Datetime(string='Departure Date', compute='_compute_date_kirim', copy=False) note_website = fields.Char(string="Note Website") use_button = fields.Boolean(string='Using Calculate Selling Price', copy=False) + voucher_shipping_id = fields.Many2one(comodel_name='voucher', string='Voucher', copy=False) def _compute_date_kirim(self): for rec in self: -- cgit v1.2.3 From ca5c12f1ee40ea3c34cafcc9fe73d3d79a6a5b98 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Wed, 4 Sep 2024 15:53:40 +0700 Subject: fix margin with fee third party --- indoteknik_custom/models/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 348ea4d3..81c3f5ed 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -744,7 +744,7 @@ class SaleOrder(models.Model): delivery_amt = order.delivery_amt else: delivery_amt = 0 - order.total_percent_margin = round((order.total_margin / (order.amount_untaxed-delivery_amt)) * 100, 2) + order.total_percent_margin = round((order.total_margin / (order.amount_untaxed-delivery_amt-order.fee_third_party)) * 100, 2) # order.total_percent_margin = round((order.total_margin / (order.amount_untaxed)) * 100, 2) @api.onchange('sales_tax_id') -- cgit v1.2.3 From 1bb074bb8f63072fb990c57c18986c50981f1402 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 4 Sep 2024 17:12:38 +0700 Subject: fix voucher shipping --- indoteknik_custom/models/sale_order.py | 54 ++++++++++++++++++++++++++- indoteknik_custom/models/website_user_cart.py | 3 +- 2 files changed, 54 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 348ea4d3..0268f27b 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -88,6 +88,8 @@ class SaleOrder(models.Model): voucher_id = fields.Many2one(comodel_name='voucher', string='Voucher', copy=False) applied_voucher_id = fields.Many2one(comodel_name='voucher', string='Applied Voucher', copy=False) amount_voucher_disc = fields.Float(string='Voucher Discount') + applied_voucher_shipping_id = fields.Many2one(comodel_name='voucher', string='Applied Voucher', copy=False) + amount_voucher_shipping_disc = fields.Float(string='Voucher Discount') source_id = fields.Many2one('utm.source', 'Source', domain="[('id', 'in', [32, 59, 60, 61])]", required=True) estimated_arrival_days = fields.Integer('Estimated Arrival Days', default=0) email = fields.Char(string='Email') @@ -109,7 +111,7 @@ class SaleOrder(models.Model): date_driver_departure = fields.Datetime(string='Departure Date', compute='_compute_date_kirim', copy=False) note_website = fields.Char(string="Note Website") use_button = fields.Boolean(string='Using Calculate Selling Price', copy=False) - voucher_shipping_id = fields.Many2one(comodel_name='voucher', string='Voucher', copy=False) + voucher_shipping_id = fields.Many2one(comodel_name='voucher', string='Voucher Shipping', copy=False) def _compute_date_kirim(self): for rec in self: @@ -781,6 +783,28 @@ class SaleOrder(models.Model): self.apply_voucher() + def action_apply_voucher_shipping(self): + for line in self.order_line: + if line.order_promotion_id: + raise UserError('Voucher tidak dapat digabung dengan promotion program') + + voucher = self.voucher_shipping_id + if voucher.limit > 0 and voucher.count_order >= voucher.limit: + raise UserError('Voucher tidak dapat digunakan karena sudah habis digunakan') + + partner_voucher_orders = [] + for order in voucher.order_ids: + if order.partner_id.id == self.partner_id.id: + partner_voucher_orders.append(order) + + if voucher.limit_user > 0 and len(partner_voucher_orders) >= voucher.limit_user: + raise UserError('Voucher tidak dapat digunakan karena Customer ini sudah menghabiskan kuota voucher') + + if self.pricelist_id.id in [x.id for x in voucher.excl_pricelist_ids]: + raise UserError('Voucher tidak dapat digunakan karena pricelist ini tidak berlaku pada voucher') + + self.apply_voucher_shipping() + def apply_voucher(self): order_line = [] for line in self.order_line: @@ -822,6 +846,29 @@ class SaleOrder(models.Model): self.amount_voucher_disc = voucher['discount']['all'] self.applied_voucher_id = self.voucher_id + def apply_voucher_shipping(self): + for order in self: + delivery_amt = order.delivery_amt + voucher = order.voucher_shipping_id + + if voucher: + max_discount_amount = voucher.discount_amount + voucher_type = voucher.discount_type + + if voucher_type == 'fixed_price': + discount = max_discount_amount + elif voucher_type == 'percentage': + discount = delivery_amt * (max_discount_amount / 100) + + delivery_amt -= discount + + delivery_amt = max(delivery_amt, 0) + + order.delivery_amt = delivery_amt + + order.amount_voucher_shipping_disc = discount + order.applied_voucher_shipping_id = order.voucher_id.id + def cancel_voucher(self): self.applied_voucher_id = False self.amount_voucher_disc = 0 @@ -830,6 +877,11 @@ class SaleOrder(models.Model): line.discount = line.initial_discount line.initial_discount = False + def cancel_voucher_shipping(self): + self.delivery_amt + self.amount_voucher_shipping_disc + self.applied_voucher_shipping_id = False + self.amount_voucher_shipping_disc = 0 + def action_web_approve(self): if self.env.uid != self.partner_id.user_id.id: raise UserError('You are not authorized to approve this order. Only %s can approve this order.' % self.partner_id.user_id.name) diff --git a/indoteknik_custom/models/website_user_cart.py b/indoteknik_custom/models/website_user_cart.py index 0af22d47..b0cf47f7 100644 --- a/indoteknik_custom/models/website_user_cart.py +++ b/indoteknik_custom/models/website_user_cart.py @@ -130,8 +130,7 @@ class WebsiteUserCart(models.Model): if voucher_shipping: voucher_shipping_info = voucher_shipping.apply(order_line) - discount_voucher_shipping = voucher_shipping_info['discount']['all'] - subtotal -= discount_voucher_shipping + discount_voucher_shipping = voucher_shipping_info['discount']['all'] tax = round(subtotal * 0.11) grand_total = subtotal + tax -- cgit v1.2.3 From 013a3e4d73327c138ede6f224b32969dc8f85c1f Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 4 Sep 2024 17:18:02 +0700 Subject: solr category management --- indoteknik_custom/models/solr/__init__.py | 3 +- .../models/solr/website_categories_management.py | 108 +++++++++++++++++++++ 2 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 indoteknik_custom/models/solr/website_categories_management.py (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/solr/__init__.py b/indoteknik_custom/models/solr/__init__.py index 606c0035..dafd5a1e 100644 --- a/indoteknik_custom/models/solr/__init__.py +++ b/indoteknik_custom/models/solr/__init__.py @@ -10,4 +10,5 @@ from . import x_banner_banner from . import product_public_category from . import x_banner_category from . import promotion_program -from . import promotion_program_line \ No newline at end of file +from . import promotion_program_line +from . import website_categories_management \ No newline at end of file diff --git a/indoteknik_custom/models/solr/website_categories_management.py b/indoteknik_custom/models/solr/website_categories_management.py new file mode 100644 index 00000000..c3851f4b --- /dev/null +++ b/indoteknik_custom/models/solr/website_categories_management.py @@ -0,0 +1,108 @@ +from odoo import models, fields, api +from datetime import datetime +import json + + +class WebsiteCategoriesHomepage(models.Model): + _inherit = 'website.categories.management' + + last_update_solr = fields.Datetime('Last Update Solr') + + def solr(self): + return self.env['apache.solr'].connect('category_management') + + def update_last_update_solr(self): + self.last_update_solr = datetime.utcnow() + + def _create_solr_queue(self, function_name): + for rec in self: + self.env['apache.solr.queue'].create_unique({ + 'res_model': self._name, + 'res_id': rec.id, + 'function_name': function_name + }) + + @api.constrains('status') + def _create_solr_queue_sync_status(self): + self._create_solr_queue('_sync_status_category_homepage_solr') + + @api.constrains('category_id', 'category_id2', 'sequence') + def _create_solr_queue_sync_category_homepage(self): + self._create_solr_queue('_sync_category_management_to_solr') + + def action_sync_to_solr(self): + category_ids = self.env.context.get('active_ids', []) + categories = self.search([('id', 'in', category_ids)]) + categories._create_solr_queue('_sync_category_management_to_solr') + + def unlink(self): + res = super(WebsiteCategoriesHomepage, self).unlink() + for rec in self: + self.solr().delete(rec.id) + self.solr().optimize() + self.solr().commit() + return res + + def _sync_status_category_homepage_solr(self): + for rec in self: + if rec.status == 'tayang': + rec._sync_category_management_to_solr() + else: + rec.unlink() + + def _sync_category_management_to_solr(self): + solr_model = self.env['apache.solr'] + + for category in self: + if category.status != 'tayang': + continue + + # Level 1 Document + document = solr_model.get_doc('category_management', category.id) + document.update({ + 'id': category.id, + 'category_id_i': category.category_id.id, + 'name_s': category.category_id.name, + 'image_s': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category.category_id.id), + 'sequence_i': category.sequence or '', + 'numFound_i': len(category.category_id.product_tmpl_ids.ids), + }) + + # Level 2 and Level 3 Documents + level_2_docs = [] + for x in category.category_id2: + level_2_doc = { + 'id_level_2': x.id, + 'name_level_2': x.name, + 'numFound_level_2': len(x.product_tmpl_ids.ids), + 'image_level_2': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', x.id), + 'categories_level_3': [] + } + + # Level 3 Data + for child in x.child_frontend_id2: + level_3_doc = { + 'id_level_3': child.id, + 'name_level_3': child.name, + 'numFound_level_3': len(child.product_tmpl_ids.ids), + 'image_level_3': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', child.id), + } + level_2_doc['categories_level_3'].append(level_3_doc) + + level_2_docs.append(level_2_doc) + + # Add level 2 documents to level 1 document + document['categories_level_2'] = level_2_docs + + # Add document to Solr + self.solr().add([document]) + category.update_last_update_solr() + + self.solr().commit() + + + # def _sync_delete_solr(self): + # for rec in self: + # self.solr().delete(rec.id) + # self.solr().optimize() + # self.solr().commit() \ No newline at end of file -- cgit v1.2.3 From 4252e1b1b58499443a29c4a9fcf7d8ea8c2d2d31 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 5 Sep 2024 16:43:11 +0700 Subject: update category management slinder --- indoteknik_custom/models/__init__.py | 1 + .../models/website_categories_management.py | 36 +++++++++++++--------- .../models/website_categories_management_line.py | 22 +++++++++++++ 3 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 indoteknik_custom/models/website_categories_management_line.py (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index e9ce587c..ad7b1d09 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -39,6 +39,7 @@ from . import website_brand_homepage from . import website_categories_homepage from . import website_categories_lob from . import website_categories_management +from . import website_categories_management_line from . import website_content from . import website_page_content from . import website_user_cart diff --git a/indoteknik_custom/models/website_categories_management.py b/indoteknik_custom/models/website_categories_management.py index 208b07a2..e430ef5f 100644 --- a/indoteknik_custom/models/website_categories_management.py +++ b/indoteknik_custom/models/website_categories_management.py @@ -6,8 +6,8 @@ class WebsiteCategoriesManagement(models.Model): _rec_name = 'category_id' category_id = fields.Many2one('product.public.category', string='Category Level 1', help='table ecommerce category', domain=lambda self: self._get_default_category_domain()) - category_id2 = fields.Many2many(comodel_name='product.public.category', relation='website_categories_category_id2_rel',column1='website_categories_homepage_id', column2='product_public_category_id', string='Category Level 2', copy=False) sequence = fields.Integer(string='Sequence') + line_ids = fields.One2many('website.categories.management.line', 'management_id', string='Category Level 2 Lines', auto_join=True) status = fields.Selection([ ('tayang', 'Tayang'), ('tidak_tayang', 'Tidak Tayang') @@ -17,11 +17,11 @@ class WebsiteCategoriesManagement(models.Model): def _onchange_category_id(self): domain = {} if self.category_id != self._origin.category_id: # Check if the category_id has changed - self.category_id2 = [(5, 0, 0)] # Clear the category_id2 field if category_id has changed + self.line_ids = [(5, 0, 0)] # Clear the lines if category_id has changed if self.category_id: - domain['category_id2'] = [('parent_frontend_id', '=', self.category_id.id)] + domain['line_ids'] = [('parent_frontend_id', '=', self.category_id.id)] else: - domain['category_id2'] = [] + domain['line_ids'] = [] return {'domain': domain} @@ -42,24 +42,30 @@ class WebsiteCategoriesManagement(models.Model): def _check_category_consistency(self): for record in self: - category_ids = record.category_id2.ids - for category in record.category_id2: - for child_category in category.child_frontend_id2: - if child_category.parent_frontend_id.id not in category_ids: + category_level2_ids = record.line_ids.mapped('category_id2.id') # Get all Category Level 2 IDs + for line in record.line_ids: + for category_level3 in line.category_id3_ids: # Loop through selected Category Level 3 + if category_level3.parent_frontend_id.id not in category_level2_ids: raise ValidationError( - f"Category Level 3 {child_category.name} bukan bagian dari category Level 2 {category.name}") + f"Category Level 3 '{category_level3.name}' bukan bagian dari Category Level 2 '{line.category_id2.name}'") def unlink(self): - for record in self.category_id2: - if record.id: + for record in self.line_ids: + if record.category_id2: related_categories = self.env['product.public.category'].search([ - ('id', 'in', record.ids) + ('id', '=', record.category_id2.id) ]) for category in related_categories: - for category3 in record.child_frontend_id2.ids: - if category3 in category.child_frontend_id2.ids: + # Iterate through the Category Level 3 related to the current Category Level 2 + for category3 in record.category_id3_ids: + # If Category Level 3 is linked to Category Level 2, remove the link + if category3.id in category.child_frontend_id2.ids: category.write({ - 'child_frontend_id2': [(3, category3)] + 'child_frontend_id2': [(3, category3.id)] + # Remove the link between Category Level 2 and Category Level 3 }) + return super(WebsiteCategoriesManagement, self).unlink() + + diff --git a/indoteknik_custom/models/website_categories_management_line.py b/indoteknik_custom/models/website_categories_management_line.py new file mode 100644 index 00000000..2f97ddfa --- /dev/null +++ b/indoteknik_custom/models/website_categories_management_line.py @@ -0,0 +1,22 @@ +from odoo import fields, models, api +from odoo.exceptions import ValidationError + +class WebsiteCategoriesManagementLine(models.Model): + _name = 'website.categories.management.line' + _order = 'sequence' + + sequence = fields.Integer(string='Sequence') + management_id = fields.Many2one('website.categories.management', string='Management Reference', required=True, ondelete='cascade') + category_id2 = fields.Many2one('product.public.category', string='Category Level 2', required=True,) + category_id3_ids = fields.Many2many('product.public.category', string='Category Level 3') + + @api.onchange('category_id2') + def _onchange_category_id2(self): + """ Update domain for category_id3_ids based on category_id2 """ + if self.category_id2: + domain_category_id3_ids = [('parent_frontend_id', '=', self.category_id2.id)] + else: + domain_category_id3_ids = [] + + return {'domain': {'category_id3_ids': domain_category_id3_ids}} + -- cgit v1.2.3 From 1b55d65464b9789164ba45bdef03c56428e026f2 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 5 Sep 2024 17:49:30 +0700 Subject: update category management --- .../models/solr/website_categories_management.py | 54 +++++++++++----------- 1 file changed, 28 insertions(+), 26 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/solr/website_categories_management.py b/indoteknik_custom/models/solr/website_categories_management.py index c3851f4b..fe85f8e7 100644 --- a/indoteknik_custom/models/solr/website_categories_management.py +++ b/indoteknik_custom/models/solr/website_categories_management.py @@ -2,19 +2,21 @@ from odoo import models, fields, api from datetime import datetime import json - class WebsiteCategoriesHomepage(models.Model): _inherit = 'website.categories.management' last_update_solr = fields.Datetime('Last Update Solr') def solr(self): + """Returns the Solr connection object.""" return self.env['apache.solr'].connect('category_management') def update_last_update_solr(self): + """Updates the last sync time for the record.""" self.last_update_solr = datetime.utcnow() def _create_solr_queue(self, function_name): + """Creates unique Solr queue for each record.""" for rec in self: self.env['apache.solr.queue'].create_unique({ 'res_model': self._name, @@ -24,26 +26,30 @@ class WebsiteCategoriesHomepage(models.Model): @api.constrains('status') def _create_solr_queue_sync_status(self): + """Triggers Solr sync when the status changes.""" self._create_solr_queue('_sync_status_category_homepage_solr') @api.constrains('category_id', 'category_id2', 'sequence') def _create_solr_queue_sync_category_homepage(self): + """Triggers Solr sync when categories or sequence change.""" self._create_solr_queue('_sync_category_management_to_solr') def action_sync_to_solr(self): + """Manual action to sync selected categories to Solr.""" category_ids = self.env.context.get('active_ids', []) categories = self.search([('id', 'in', category_ids)]) categories._create_solr_queue('_sync_category_management_to_solr') def unlink(self): - res = super(WebsiteCategoriesHomepage, self).unlink() + """Overrides unlink method to remove records from Solr.""" for rec in self: self.solr().delete(rec.id) self.solr().optimize() self.solr().commit() - return res + return super(WebsiteCategoriesHomepage, self).unlink() def _sync_status_category_homepage_solr(self): + """Syncs status to Solr or deletes if not active.""" for rec in self: if rec.status == 'tayang': rec._sync_category_management_to_solr() @@ -51,13 +57,14 @@ class WebsiteCategoriesHomepage(models.Model): rec.unlink() def _sync_category_management_to_solr(self): + """Syncs categories (Level 1, 2, and 3) to Solr.""" solr_model = self.env['apache.solr'] for category in self: if category.status != 'tayang': continue - # Level 1 Document + # Prepare Level 1 document document = solr_model.get_doc('category_management', category.id) document.update({ 'id': category.id, @@ -65,44 +72,39 @@ class WebsiteCategoriesHomepage(models.Model): 'name_s': category.category_id.name, 'image_s': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category.category_id.id), 'sequence_i': category.sequence or '', - 'numFound_i': len(category.category_id.product_tmpl_ids.ids), + 'numFound_i': len(category.category_id.product_tmpl_ids), }) - # Level 2 and Level 3 Documents + # Prepare Level 2 documents level_2_docs = [] - for x in category.category_id2: + for category_level_2 in category.line_ids.mapped('category_id2'): level_2_doc = { - 'id_level_2': x.id, - 'name_level_2': x.name, - 'numFound_level_2': len(x.product_tmpl_ids.ids), - 'image_level_2': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', x.id), + 'id_level_2': category_level_2.id, + 'name_level_2': category_level_2.name, + 'numFound_level_2': len(category_level_2.product_tmpl_ids), + 'image_level_2': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category_level_2.id), 'categories_level_3': [] } - # Level 3 Data - for child in x.child_frontend_id2: + # Prepare Level 3 documents + for category_level_3 in category_level_2.child_frontend_id2: level_3_doc = { - 'id_level_3': child.id, - 'name_level_3': child.name, - 'numFound_level_3': len(child.product_tmpl_ids.ids), - 'image_level_3': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', child.id), + 'id_level_3': category_level_3.id, + 'name_level_3': category_level_3.name, + 'numFound_level_3': len(category_level_3.product_tmpl_ids), + 'image_level_3': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category_level_3.id), } level_2_doc['categories_level_3'].append(level_3_doc) level_2_docs.append(level_2_doc) - # Add level 2 documents to level 1 document + # Add Level 2 documents to Level 1 document document['categories_level_2'] = level_2_docs - # Add document to Solr + # Sync document with Solr self.solr().add([document]) category.update_last_update_solr() + # Commit and optimize Solr changes self.solr().commit() - - - # def _sync_delete_solr(self): - # for rec in self: - # self.solr().delete(rec.id) - # self.solr().optimize() - # self.solr().commit() \ No newline at end of file + self.solr().optimize() -- cgit v1.2.3 From 94be2756aa2ab4c5a403877e9085eab344468f1a Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 6 Sep 2024 09:31:28 +0700 Subject: update category management --- .../models/solr/website_categories_management.py | 44 ++++++++++++---------- .../models/website_categories_management.py | 4 ++ 2 files changed, 28 insertions(+), 20 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/solr/website_categories_management.py b/indoteknik_custom/models/solr/website_categories_management.py index fe85f8e7..1f4caac3 100644 --- a/indoteknik_custom/models/solr/website_categories_management.py +++ b/indoteknik_custom/models/solr/website_categories_management.py @@ -65,41 +65,44 @@ class WebsiteCategoriesHomepage(models.Model): continue # Prepare Level 1 document - document = solr_model.get_doc('category_management', category.id) - document.update({ + document = { 'id': category.id, + 'sequence': category.sequence or '', 'category_id_i': category.category_id.id, - 'name_s': category.category_id.name, - 'image_s': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category.category_id.id), - 'sequence_i': category.sequence or '', - 'numFound_i': len(category.category_id.product_tmpl_ids), - }) + 'name': category.category_id.name, + 'numFound': len(category.category_id.product_tmpl_ids), + 'image': self.env['ir.attachment'].api_image( + 'product.public.category', 'image_1920', category.category_id.id + ), + 'categories': [] + } # Prepare Level 2 documents - level_2_docs = [] for category_level_2 in category.line_ids.mapped('category_id2'): level_2_doc = { 'id_level_2': category_level_2.id, - 'name_level_2': category_level_2.name, - 'numFound_level_2': len(category_level_2.product_tmpl_ids), - 'image_level_2': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category_level_2.id), - 'categories_level_3': [] + 'name': category_level_2.name, + 'numFound': len(category_level_2.product_tmpl_ids), + 'image': self.env['ir.attachment'].api_image( + 'product.public.category', 'image_1920', category_level_2.id + ), + 'child_frontend_id_i': [] } # Prepare Level 3 documents for category_level_3 in category_level_2.child_frontend_id2: level_3_doc = { 'id_level_3': category_level_3.id, - 'name_level_3': category_level_3.name, - 'numFound_level_3': len(category_level_3.product_tmpl_ids), - 'image_level_3': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category_level_3.id), + 'name': category_level_3.name, + 'numFound': len(category_level_3.product_tmpl_ids), + 'image': self.env['ir.attachment'].api_image( + 'product.public.category', 'image_1920', category_level_3.id + ), } - level_2_doc['categories_level_3'].append(level_3_doc) - - level_2_docs.append(level_2_doc) + level_2_doc['child_frontend_id_i'].append(level_3_doc) - # Add Level 2 documents to Level 1 document - document['categories_level_2'] = level_2_docs + # Add Level 2 document to Level 1 + document['categories'].append(level_2_doc) # Sync document with Solr self.solr().add([document]) @@ -108,3 +111,4 @@ class WebsiteCategoriesHomepage(models.Model): # Commit and optimize Solr changes self.solr().commit() self.solr().optimize() + diff --git a/indoteknik_custom/models/website_categories_management.py b/indoteknik_custom/models/website_categories_management.py index e430ef5f..3b1db7dd 100644 --- a/indoteknik_custom/models/website_categories_management.py +++ b/indoteknik_custom/models/website_categories_management.py @@ -7,6 +7,10 @@ class WebsiteCategoriesManagement(models.Model): category_id = fields.Many2one('product.public.category', string='Category Level 1', help='table ecommerce category', domain=lambda self: self._get_default_category_domain()) sequence = fields.Integer(string='Sequence') + category_id2 = fields.Many2many(comodel_name='product.public.category', + relation='website_categories_category_id2_rel', + column1='website_categories_homepage_id', column2='product_public_category_id', + string='Category Level 2', copy=False) line_ids = fields.One2many('website.categories.management.line', 'management_id', string='Category Level 2 Lines', auto_join=True) status = fields.Selection([ ('tayang', 'Tayang'), -- cgit v1.2.3 From f6a26ebaa1b960b0ad5de8f6f28238c1e31cd621 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 6 Sep 2024 14:32:39 +0700 Subject: upadate category management sync to solr --- .../models/solr/website_categories_management.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/solr/website_categories_management.py b/indoteknik_custom/models/solr/website_categories_management.py index 1f4caac3..0a40a356 100644 --- a/indoteknik_custom/models/solr/website_categories_management.py +++ b/indoteknik_custom/models/solr/website_categories_management.py @@ -67,11 +67,11 @@ class WebsiteCategoriesHomepage(models.Model): # Prepare Level 1 document document = { 'id': category.id, - 'sequence': category.sequence or '', + 'sequence_i': category.sequence or '', 'category_id_i': category.category_id.id, - 'name': category.category_id.name, - 'numFound': len(category.category_id.product_tmpl_ids), - 'image': self.env['ir.attachment'].api_image( + 'name_s': category.category_id.name, + 'numFound_i': len(category.category_id.product_tmpl_ids), + 'image_s': self.env['ir.attachment'].api_image( 'product.public.category', 'image_1920', category.category_id.id ), 'categories': [] @@ -99,10 +99,10 @@ class WebsiteCategoriesHomepage(models.Model): 'product.public.category', 'image_1920', category_level_3.id ), } - level_2_doc['child_frontend_id_i'].append(level_3_doc) + level_2_doc['child_frontend_id_i'].append(json.dumps(level_3_doc)) # Add Level 2 document to Level 1 - document['categories'].append(level_2_doc) + document['categories'].append(json.dumps(level_2_doc)) # Sync document with Solr self.solr().add([document]) -- cgit v1.2.3 From 494acce1cb7490ab27ad06d2bb9f36d98fbb2256 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Sat, 7 Sep 2024 09:34:40 +0700 Subject: fix bug commision --- indoteknik_custom/models/commision.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/commision.py b/indoteknik_custom/models/commision.py index c5809005..48f1c7f6 100644 --- a/indoteknik_custom/models/commision.py +++ b/indoteknik_custom/models/commision.py @@ -261,6 +261,7 @@ class CustomerCommision(models.Model): ('move_id.invoice_date', '>=', self.date_from), ('move_id.invoice_date', '<=', self.date_to), ('product_id.x_manufacture', 'in', brand), + ('exclude_from_invoice_tab', '=', False), ] invoice_lines = self.env['account.move.line'].search(where, order='id') for invoice_line in invoice_lines: -- cgit v1.2.3 From 0aacd16c72067c0bb5c9c8ca24bb19a7995b132b Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 9 Sep 2024 10:34:58 +0700 Subject: delete not lines category management --- indoteknik_custom/models/website_categories_management.py | 4 ---- 1 file changed, 4 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/website_categories_management.py b/indoteknik_custom/models/website_categories_management.py index 3b1db7dd..e430ef5f 100644 --- a/indoteknik_custom/models/website_categories_management.py +++ b/indoteknik_custom/models/website_categories_management.py @@ -7,10 +7,6 @@ class WebsiteCategoriesManagement(models.Model): category_id = fields.Many2one('product.public.category', string='Category Level 1', help='table ecommerce category', domain=lambda self: self._get_default_category_domain()) sequence = fields.Integer(string='Sequence') - category_id2 = fields.Many2many(comodel_name='product.public.category', - relation='website_categories_category_id2_rel', - column1='website_categories_homepage_id', column2='product_public_category_id', - string='Category Level 2', copy=False) line_ids = fields.One2many('website.categories.management.line', 'management_id', string='Category Level 2 Lines', auto_join=True) status = fields.Selection([ ('tayang', 'Tayang'), -- cgit v1.2.3 From 894d4806067463fceaa2c6e6a67882e8f0bed974 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 9 Sep 2024 11:04:35 +0700 Subject: remove product sementara validation --- indoteknik_custom/models/product_template.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/product_template.py b/indoteknik_custom/models/product_template.py index e6778758..000ee3bf 100755 --- a/indoteknik_custom/models/product_template.py +++ b/indoteknik_custom/models/product_template.py @@ -338,9 +338,9 @@ class ProductTemplate(models.Model): return values def write(self, vals): - for rec in self: - if rec.id == 224484: - raise UserError('Tidak dapat mengubah produk sementara') + # for rec in self: + # if rec.id == 224484: + # raise UserError('Tidak dapat mengubah produk sementara') return super(ProductTemplate, self).write(vals) -- cgit v1.2.3 From ee22bb5c668c346c5f8ba2c4e148324dab0c6a3e Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Tue, 10 Sep 2024 10:27:15 +0700 Subject: bill dp --- indoteknik_custom/models/purchase_order.py | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index 8ec904a9..83e401b7 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -66,6 +66,53 @@ class PurchaseOrder(models.Model): ('printed', 'Printed') ], string='Printed?', copy=False, tracking=True) date_done_picking = fields.Datetime(string='Date Done Picking', compute='get_date_done') + bills_dp_id = fields.Many2one('account.move', string='Bills DP') + + def create_bill_dp(self): + if not self.env.user.is_accounting: + raise UserError('Hanya Accounting yang bisa bikin bill dp') + + current_date = datetime.utcnow() + data_bills = { + 'partner_id': self.partner_id.id, + 'partner_shipping_id': self.partner_id.id, + 'ref': self.name, + 'invoice_date': current_date, + 'date': current_date, + 'move_type': 'in_invoice' + + } + + bills = self.env['account.move'].create([data_bills]) + + product_dp = self.env['product.product'].browse(229625) + + data_line_bills = { + 'move_id': bills.id, + 'product_id': product_dp.id, #product down payment + 'account_id': 401, #Uang Muka persediaan barang dagang + 'quantity': 1, + 'product_uom_id': 1, + 'tax_ids': [line[0].taxes_id.id for line in self.order_line], + } + + + bills_line = self.env['account.move.line'].create([data_line_bills]) + + self.bills_dp_id = bills.id + + move_line = bills.line_ids + move_line.name = '[IT.121456] Down Payment' + move_line.partner_id = self.partner_id.id + + return { + 'name': _('Account Move'), + 'view_mode': 'tree,form', + 'res_model': 'account.move', + 'target': 'current', + 'type': 'ir.actions.act_window', + 'domain': [('id', '=', bills.id)] + } def get_date_done(self): picking = self.env['stock.picking'].search([ -- cgit v1.2.3 From b61d191e9d5663acb81338de133789fd0c43bdf0 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Tue, 10 Sep 2024 16:10:15 +0700 Subject: add payment terms on users --- indoteknik_custom/models/res_users.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/res_users.py b/indoteknik_custom/models/res_users.py index 33f64ce3..70a7dc53 100755 --- a/indoteknik_custom/models/res_users.py +++ b/indoteknik_custom/models/res_users.py @@ -11,6 +11,7 @@ class ResUsers(models.Model): activation_token = fields.Char(string="Activation Token") otp_code = fields.Char(string='OTP Code') otp_create_date = fields.Datetime(string='OTP Create Date') + payment_terms_id = fields.Many2one('account.payment.term', related='partner_id.property_payment_term_id', string='Payment Terms') def _generate_otp(self): for user in self: -- cgit v1.2.3 From 1371df38b6818960e6e9520ae783f041694209d8 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 11 Sep 2024 13:39:13 +0700 Subject: ongkos kirim po --- indoteknik_custom/models/purchase_order.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index 83e401b7..edcbbb19 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -31,6 +31,7 @@ class PurchaseOrder(models.Model): ('approved', 'Approved'), ], string='Approval Status', readonly=True, copy=False, index=True, tracking=3) delivery_amount = fields.Float('Delivery Amount', compute='compute_delivery_amount') + delivery_amt = fields.Float('Delivery Amt') total_margin = fields.Float( 'Margin', compute='compute_total_margin', help="Total Margin in Sales Order Header") @@ -67,6 +68,14 @@ class PurchaseOrder(models.Model): ], string='Printed?', copy=False, tracking=True) date_done_picking = fields.Datetime(string='Date Done Picking', compute='get_date_done') bills_dp_id = fields.Many2one('account.move', string='Bills DP') + grand_total = fields.Monetary(string='Grand Total', help='Amount total + amount delivery', compute='_compute_grand_total') + + def _compute_grand_total(self): + for order in self: + if order.delivery_amt: + order.grand_total = order.delivery_amt + order.amount_total + else: + order.grand_total = order.amount_total def create_bill_dp(self): if not self.env.user.is_accounting: @@ -671,6 +680,8 @@ class PurchaseOrder(models.Model): purchase_price = line.price_subtotal if line.order_id.delivery_amount > 0: purchase_price += line.delivery_amt_line + if line.order_id.delivery_amt > 0: + purchase_price += line.order_id.delivery_amt real_item_margin = sales_price - purchase_price sum_margin += real_item_margin @@ -713,6 +724,8 @@ class PurchaseOrder(models.Model): purchase_price = po_line.price_subtotal / po_line.product_qty * line.qty_po if line.purchase_order_id.delivery_amount > 0: purchase_price += (po_line.delivery_amt_line / po_line.product_qty) * line.qty_po + if line.purchase_order_id.delivery_amt > 0: + purchase_price += line.purchase_order_id.delivery_amt real_item_margin = sales_price - purchase_price sum_margin += real_item_margin -- cgit v1.2.3 From d8e60a974097058482167eefe658f9b4e89c0dd2 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Wed, 11 Sep 2024 16:07:56 +0700 Subject: mandatory delivery date --- indoteknik_custom/models/sale_order.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index b6759306..5e792b05 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -633,6 +633,9 @@ class SaleOrder(models.Model): if not order.client_order_ref and order.create_date > datetime(2024, 6, 27): raise UserError("Customer Reference kosong, di isi dengan NO PO jika PO tidak ada mohon ditulis Tanpa PO") + + if not order.commitment_date and order.create_date > datetime(2024, 9, 10): + raise UserError("Expected Delivery Date kosong, wajib diisi") if order.validate_partner_invoice_due(): return self._create_notification_action('Notification', 'Terdapat invoice yang telah melewati batas waktu, mohon perbarui pada dokumen Due Extension') -- cgit v1.2.3 From a8e539c92236453ce7aad06d23cf117f4b7239fc Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Wed, 11 Sep 2024 16:08:30 +0700 Subject: revise --- indoteknik_custom/models/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 5e792b05..9506aedb 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -634,7 +634,7 @@ class SaleOrder(models.Model): if not order.client_order_ref and order.create_date > datetime(2024, 6, 27): raise UserError("Customer Reference kosong, di isi dengan NO PO jika PO tidak ada mohon ditulis Tanpa PO") - if not order.commitment_date and order.create_date > datetime(2024, 9, 10): + if not order.commitment_date and order.create_date > datetime(2024, 9, 12): raise UserError("Expected Delivery Date kosong, wajib diisi") if order.validate_partner_invoice_due(): -- cgit v1.2.3