From 0b85c98761260dd93b70fa429340c4edbf5154b1 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 14 Nov 2022 11:45:32 +0700 Subject: add approval if want to return --- indoteknik_custom/models/__init__.py | 1 + indoteknik_custom/models/stock_picking.py | 15 ++++++++++++++- indoteknik_custom/models/stock_picking_return.py | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 indoteknik_custom/models/stock_picking_return.py (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 94fe56fe..8645fb00 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -29,3 +29,4 @@ from . import users from . import ir_attachment from . import delivery_carrier from . import dunning_run +from . import stock_picking_return diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index d016e241..2f82c6f6 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -50,7 +50,12 @@ class StockPicking(models.Model): approval_status = fields.Selection([ ('pengajuan1', 'Approval Accounting'), ('approved', 'Approved'), - ], string='Approval Status', readonly=True, copy=False, index=True, tracking=3) + ], string='Approval Status', readonly=True, copy=False, index=True, tracking=3, help="Approval Status untuk Internal Use") + + approval_return_status = fields.Selection([ + ('pengajuan1', 'Approval Accounting'), + ('approved', 'Approved'), + ], string='Approval Return Status', readonly=True, copy=False, index=True, tracking=3, help="Approval Status untuk Return") def action_assign(self): res = super(StockPicking, self).action_assign() @@ -68,6 +73,13 @@ class StockPicking(models.Model): raise UserError("Qty tidak boleh 0") pick.approval_status = 'pengajuan1' + def ask_return_approval(self): + for pick in self: + if self.env.user.is_accounting: + pick.approval_return_status = 'approved' + else: + pick.approval_return_status = 'pengajuan1' + def calculate_line_no(self): line_no = 0 for picking in self: @@ -102,6 +114,7 @@ class StockPicking(models.Model): if self.picking_type_id.code == 'incoming' and self.group_id.id == False and self.is_internal_use == False: raise UserError(_('Tidak bisa Validate jika tidak dari Document SO / PO')) + if self.is_internal_use and not self.env.user.is_accounting: raise UserError("Harus di Approve oleh Accounting") res = super(StockPicking, self).button_validate() diff --git a/indoteknik_custom/models/stock_picking_return.py b/indoteknik_custom/models/stock_picking_return.py new file mode 100644 index 00000000..a4a3a500 --- /dev/null +++ b/indoteknik_custom/models/stock_picking_return.py @@ -0,0 +1,19 @@ +from odoo import _, api, fields, models +from odoo.exceptions import UserError +from odoo.tools.float_utils import float_round + + +class ReturnPicking(models.TransientModel): + _inherit = 'stock.return.picking' + + @api.model + def default_get(self, fields): + res = super(ReturnPicking, self).default_get(fields) + + stock_picking = self.env['stock.picking'].search([ + ('id', '=', res['picking_id']), + ]) + if not stock_picking.approval_return_status == 'approved': + raise UserError('Harus Approval Accounting untuk melakukan Retur') + + return res \ No newline at end of file -- cgit v1.2.3 From 0886dcb783f8c57859e2856c7936015b7bba3fa5 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 14 Nov 2022 13:58:59 +0700 Subject: return approval if just have invoice only --- indoteknik_custom/models/stock_picking_return.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/stock_picking_return.py b/indoteknik_custom/models/stock_picking_return.py index a4a3a500..91a3a9fd 100644 --- a/indoteknik_custom/models/stock_picking_return.py +++ b/indoteknik_custom/models/stock_picking_return.py @@ -13,7 +13,15 @@ class ReturnPicking(models.TransientModel): stock_picking = self.env['stock.picking'].search([ ('id', '=', res['picking_id']), ]) - if not stock_picking.approval_return_status == 'approved': - raise UserError('Harus Approval Accounting untuk melakukan Retur') + + sale_id = stock_picking.group_id.sale_id + if not stock_picking.approval_return_status == 'approved' and sale_id.invoice_ids: + raise UserError('Harus Approval Accounting AR untuk melakukan Retur') + + purchase = self.env['purchase.order'].search([ + ('name', '=', stock_picking.group_id.name), + ]) + if not stock_picking.approval_return_status == 'approved' and purchase.invoice_ids: + raise UserError('Harus Approval Accounting AP untuk melakukan Retur') return res \ No newline at end of file -- cgit v1.2.3 From 61ada75c5d0e065d62c2aea0c59c153446bbf56c Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 14 Nov 2022 16:20:43 +0700 Subject: qty delivered cant greater than qty so validation --- indoteknik_custom/models/stock_picking.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 2f82c6f6..2bdfbd9e 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -111,12 +111,18 @@ class StockPicking(models.Model): def button_validate(self): if not self.picking_code: self.picking_code = self.env['ir.sequence'].next_by_code('stock.picking.code') or '0' - + if self.picking_type_id.code == 'incoming' and self.group_id.id == False and self.is_internal_use == False: raise UserError(_('Tidak bisa Validate jika tidak dari Document SO / PO')) if self.is_internal_use and not self.env.user.is_accounting: raise UserError("Harus di Approve oleh Accounting") + + for line in self.move_line_ids_without_package: + if line.move_id.sale_line_id and self.picking_type_id.code == 'outgoing': + if line.move_id.sale_line_id.qty_delivered + line.qty_done > line.move_id.sale_line_id.product_uom_qty: + raise UserError("Qty Delivered akan lebih dari Qty SO") + res = super(StockPicking, self).button_validate() return res -- cgit v1.2.3 From d23592de2c631cf1b7bbdc53cfca7a95607c0b36 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 15 Nov 2022 09:39:24 +0700 Subject: Update product_pricelist.py and product_pricelist.xml --- indoteknik_custom/models/product_pricelist.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/product_pricelist.py b/indoteknik_custom/models/product_pricelist.py index 5573ea55..7b850d57 100644 --- a/indoteknik_custom/models/product_pricelist.py +++ b/indoteknik_custom/models/product_pricelist.py @@ -9,6 +9,7 @@ class ProductPricelist(models.Model): banner = fields.Binary(string='Banner') start_date = fields.Datetime(string='Start Date') end_date = fields.Datetime(string='End Date') + banner_mobile = fields.Binary(string='Banner Mobile') class ProductPricelistItem(models.Model): -- cgit v1.2.3 From 9d0dbdfe0e08ecab850860fa2b23ffb64fa6dae1 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 15 Nov 2022 17:29:45 +0700 Subject: add search rank in product template --- indoteknik_custom/models/product_template.py | 1 + indoteknik_custom/models/user_activity_log.py | 31 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/product_template.py b/indoteknik_custom/models/product_template.py index 5d34fbc8..114899e6 100755 --- a/indoteknik_custom/models/product_template.py +++ b/indoteknik_custom/models/product_template.py @@ -33,6 +33,7 @@ class ProductTemplate(models.Model): web_price_sorting = fields.Float('Web Price Sorting', help='Hanya digunakan untuk sorting di web, harga tidak berlaku', default=0.0) virtual_qty = fields.Float(string='Virtual Qty', default=0) solr_flag = fields.Integer(string='Solr Flag', default=0) + search_rank = fields.Integer(string='Search Rank', default=0) # def write(self, vals): # if 'solr_flag' not in vals and self.solr_flag == 1: diff --git a/indoteknik_custom/models/user_activity_log.py b/indoteknik_custom/models/user_activity_log.py index 07079714..ab85d47f 100755 --- a/indoteknik_custom/models/user_activity_log.py +++ b/indoteknik_custom/models/user_activity_log.py @@ -1,4 +1,7 @@ from odoo import models, fields +import logging, re + +_logger = logging.getLogger(__name__) class UserActivityLog(models.Model): @@ -9,8 +12,36 @@ class UserActivityLog(models.Model): url = fields.Char(string="URL") res_user_id = fields.Many2one("res.users", string="User") email = fields.Char(string="Email") + update_product = fields.Boolean(string="Update Product") def clean_activity_log(self): self.env['user.activity.log'].search([ ('email', 'not ilike', '%@%'), ]).unlink() + + def update_rank_search(self): + activity_logs = self.env['user.activity.log'].search([ + ('url', 'ilike', '%/shop/product/%'), + ('update_product', '=', False), + # ('url', 'not ilike', '%/shop/product/%google-ads-shopping'), + # ('id', '=', 211957) + ], limit=1000) + + for activity_log in activity_logs: + _logger.info(activity_log.url) + strip_index = i = 0 + for c in activity_log.url: + if c == '-': + strip_index = i + i += 1 + _logger.info(activity_log.url[strip_index+1:len(activity_log.url)]) + product_id = activity_log.url[strip_index+1:len(activity_log.url)] + if '#' in product_id: + continue + if any(ch.isalpha() for ch in product_id): + continue + template = self.env['product.template'].search([ + ('id', '=', product_id) + ], limit=1) + template.search_rank += int(template.search_rank+1) + activity_log.update_product = True -- cgit v1.2.3