From 1f491c22d519edb0df0515eba803dcd2a3436cf8 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 31 Jan 2024 16:19:39 +0700 Subject: fix error local variable assignment --- indoteknik_custom/models/requisition.py | 227 ++++++++++++++++---------------- 1 file changed, 111 insertions(+), 116 deletions(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 7ceff6e5..d6b33044 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -1,6 +1,7 @@ -from odoo import models, fields, api +from odoo import models, fields, api, _ from odoo.exceptions import UserError from datetime import datetime +import math import logging _logger = logging.getLogger(__name__) @@ -28,108 +29,84 @@ class Requisition(models.Model): result = super(Requisition, self).create(vals) return result - # def create_requisition_from_sales_with_price(self): - # if self.requisition_lines: - # raise UserError('Sudah digenerate sebelumnya, hapus line terlebih dahulu') - # if not self.sale_order_id: - # raise UserError('Sale Order harus diisi') - # if self.is_po: - # raise UserError('Sudah jadi PO, tidak bisa di create ulang PO nya') - - # count = 0 - # for order_line in self.sale_order_id.order_line: - # # get purchase price altama, if nothing, then get other cheaper, if nothing then last po - # purchase_price = order_line.purchase_price - # vendor_id = order_line.vendor_id.id - - # # get qty available bandengan - # qty_available = order_line.product_id.qty_onhand_bandengan + order_line.product_id.qty_incoming_bandengan - order_line.product_id.outgoing_qty - # suggest = 'harus beli' - # if qty_available > order_line.product_qty: - # suggest = 'masih cukup' - - # self.env['requisition.line'].create([{ - # 'requisition_id': self.id, - # 'partner_id': vendor_id, - # 'brand_id': order_line.product_id.product_tmpl_id.x_manufacture.id, - # 'product_id': order_line.product_id.id, - # 'qty_purchase': order_line.product_uom_qty, - # 'tax_id': order_line.purchase_tax_id.id, - # 'price_unit': purchase_price, - # 'subtotal': purchase_price * order_line.product_uom_qty, - # 'source': 'sales', - # 'qty_available_store': qty_available, - # 'suggest': suggest, - # }]) - # count+=1 - # _logger.info('Create Requisition %s' % order_line.product_id.name) - # self.notification = "Requisition Created %s lines" % count - - # def create_requisition_from_sales(self): - # if self.requisition_lines: - # raise UserError('Sudah digenerate sebelumnya, hapus line terlebih dahulu') - # if not self.sale_order_id: - # raise UserError('Sale Order harus diisi') - # if self.is_po: - # raise UserError('Sudah jadi PO, tidak bisa di create ulang PO nya') + + def create_po_from_requisition(self): + if not self.requisition_lines: + raise UserError('Tidak ada Lines, belum bisa create PO') + if self.is_po: + raise UserError('Sudah pernah di create PO') + + vendor_ids = self.env['requisition.line'].read_group([ + ('requisition_id', '=', self.id), + ('partner_id', '!=', False) + ], fields=['partner_id'], groupby=['partner_id']) + + po_ids = [] + for vendor in vendor_ids: + result_po = self.create_po_by_vendor(vendor['partner_id'][0]) + po_ids.append(result_po) + return { + 'name': _('Purchase Order'), + 'view_mode': 'tree,form', + 'res_model': 'purchase.order', + 'target': 'current', + 'type': 'ir.actions.act_window', + 'domain': [('id', 'in', po_ids)], + } - # # old_requisition = self.env['requisition'].search([('sale_order_id', '=', self.sale_order_id.id)], limit=1) - # # if old_requisition: - # # raise UserError('Sudah pernah jadi Requisition') - - # count = 0 - # for order_line in self.sale_order_id.order_line: - # # get purchase price altama, if nothing, then get other cheaper, if nothing then last po - # purchase_price = 0 - # vendor_id = 0 - - # # get qty available bandengan - # qty_available = order_line.product_id.qty_onhand_bandengan + order_line.product_id.qty_incoming_bandengan - order_line.product_id.outgoing_qty - # suggest = 'harus beli' - # if qty_available > order_line.product_qty: - # suggest = 'masih cukup' - - # purchase_pricelist = self.env['purchase.pricelist'].search([ - # ('product_id.id', '=', order_line.product_id.id), - # ('vendor_id.id', '=', 5571) - # ], order='product_price asc', limit=1) - # purchase_price = purchase_pricelist.product_price - # vendor_id = purchase_pricelist.vendor_id.id - # source = 'PriceList' - - # if not purchase_price or purchase_price <= 0: - # purchase_pricelist = self.env['purchase.pricelist'].search([('product_id', '=', order_line.product_id.id)], order='product_price asc', limit=1) - # purchase_price = purchase_pricelist.product_price - # vendor_id = purchase_pricelist.vendor_id.id - # source = 'PriceList' - - # if not purchase_price or purchase_price <= 0: - # last_po_line = self.env['purchase.order.line'].search([('product_id', '=', order_line.product_id.id), ('order_id.state', '=', 'done')], order='id desc', limit=1) - # purchase_price = last_po_line.price_unit - # vendor_id = last_po_line.order_id.partner_id.id - # source = 'LastPO' - - # if not purchase_price or purchase_price <= 0: - # purchase_price = 0 - # vendor_id = 5571 - # source = 'Nothing' - - # self.env['requisition.line'].create([{ - # 'requisition_id': self.id, - # 'partner_id': vendor_id, - # 'brand_id': order_line.product_id.product_tmpl_id.x_manufacture.id, - # 'product_id': order_line.product_id.id, - # 'qty_purchase': order_line.product_uom_qty, - # 'tax_id': order_line.purchase_tax_id.id, - # 'price_unit': purchase_price, - # 'subtotal': purchase_price * order_line.product_uom_qty, - # 'source': source, - # 'qty_available_store': qty_available, - # 'suggest': suggest, - # }]) - # count+=1 - # _logger.info('Create Requisition %s' % order_line.product_id.name) - # self.notification = "Requisition Created %s lines" % count + def create_po_by_vendor(self, vendor_id): + current_time = datetime.now() + + PRODUCT_PER_PO = 20 + + requisition_line = self.env['requisition.line'] + + param_header = { + 'partner_id': vendor_id, + # 'partner_ref': self.sale_order_id.name, + 'currency_id': 12, + 'user_id': self.env.user.id, + 'company_id': 1, # indoteknik dotcom gemilang + 'picking_type_id': 28, # indoteknik bandengan receipts + 'date_order': current_time, + 'sale_order_id': self.sale_order_id.id, + 'note_description': 'from Purchase Requisition' + } + + domain = [ + ('requisition_id', '=', self.id), + ('partner_id', '=', vendor_id), + ('qty_purchase', '>', 0) + ] + + products_len = requisition_line.search_count(domain) + page = math.ceil(products_len / PRODUCT_PER_PO) + po_ids = [] + # i start from zero (0) + for i in range(page): + new_po = self.env['purchase.order'].create([param_header]) + new_po.name = new_po.name + "/R/" + str(i + 1) + po_ids.append(new_po.id) + lines = requisition_line.search( + domain, + offset=i * PRODUCT_PER_PO, + limit=PRODUCT_PER_PO + ) + tax = [22] + + for line in lines: + product = line.product_id + param_line = { + 'product_id': product.product_id.id, + 'product_qty': product.qty_purchase, + 'product_uom_qty': product.qty_purchase, + 'price_unit': product.price_unit, + 'taxes_id': tax, + } + new_po_line = self.env['purchase.order.line'].create([param_line]) + line.current_po_id = new_po.id + line.current_po_line_id = new_po_line.id + return po_ids def create_po_from_requisition(self): if not self.requisition_lines: @@ -140,6 +117,7 @@ class Requisition(models.Model): vendor_ids = self.env['requisition.line'].read_group([('requisition_id', '=', self.id), ('partner_id', '!=', False)], fields=['partner_id'], groupby=['partner_id']) counter_po_number = 0 + po_ids = [] for vendor in vendor_ids: param_header = { 'partner_id': vendor['partner_id'][0], @@ -152,25 +130,29 @@ class Requisition(models.Model): 'sale_order_id': self.sale_order_id.id, 'note_description': 'from Purchase Requisition' } - # new_po = self.env['purchase.order'].create([param_header]) - products_vendors = self.env['requisition.line'].search([ + param_requisition_line = [ ('requisition_id', '=', self.id), ('partner_id', '=', vendor['partner_id'][0]), ('qty_purchase', '>', 0) - ], order='brand_id') + ] + # new_po = self.env['purchase.order'].create([param_header]) + products_vendors = self.env['requisition.line'].search(, order='brand_id') count = brand_id = 0 for product in products_vendors: - if count == 200 or brand_id != product.brand_id.id: - count = 0 - counter_po_number += 1 - new_po = self.env['purchase.order'].create([param_header]) - new_po.name = new_po.name + "/R/"+str(counter_po_number) - self.env['requisition.purchase.match'].create([{ - 'requisition_id': self.id, - 'order_id': new_po.id - }]) - self.env.cr.commit() + if count > 200 or brand_id != product.brand_id.id: + continue + + count = 0 + counter_po_number += 1 + new_po = self.env['purchase.order'].create([param_header]) + new_po.name = new_po.name + "/R/"+str(counter_po_number) + self.env['requisition.purchase.match'].create([{ + 'requisition_id': self.id, + 'order_id': new_po.id + }]) + po_ids.append(new_po.id) + self.env.cr.commit() # else: # new_po = self.env['purchase.order'].create([param_header]) brand_id = product.brand_id.id @@ -184,7 +166,7 @@ class Requisition(models.Model): tax = [22] param_line = { - 'order_id': new_po.id, + 'sequence': count, 'product_id': product.product_id.id, 'product_qty': product.qty_purchase, @@ -195,11 +177,24 @@ class Requisition(models.Model): # 'suggest': suggest, } new_line = self.env['purchase.order.line'].create([param_line]) + if new_po: + new_line.write({ + 'order_id': new_po.id, + }) product.current_po_id = new_po.id product.current_po_line_id = new_line.id _logger.info('Create PO Line %s' % product.product_id.name) # self.notification = self.notification + ' %s' % new_po.name self.is_po = True + if po_ids: + return { + 'name': _('Purchase Order'), + 'view_mode': 'tree,form', + 'res_model': 'purchase.order', + 'target': 'current', + 'type': 'ir.actions.act_window', + 'domain': [('id', 'in', po_ids)], + } class RequisitionLine(models.Model): _name = 'requisition.line' -- cgit v1.2.3 From 0c21532c6aa129cbafa80b6b67caf5526688b7d8 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 31 Jan 2024 16:23:11 +0700 Subject: fix error --- indoteknik_custom/models/requisition.py | 170 ++++++++++++++++---------------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index d6b33044..f3dd5093 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -108,93 +108,93 @@ class Requisition(models.Model): line.current_po_line_id = new_po_line.id return po_ids - def create_po_from_requisition(self): - if not self.requisition_lines: - raise UserError('Tidak ada Lines, belum bisa create PO') - if self.is_po: - raise UserError('Sudah pernah di create PO') - current_time = datetime.now() - vendor_ids = self.env['requisition.line'].read_group([('requisition_id', '=', self.id), ('partner_id', '!=', False)], fields=['partner_id'], groupby=['partner_id']) + # def create_po_from_requisition(self): + # if not self.requisition_lines: + # raise UserError('Tidak ada Lines, belum bisa create PO') + # if self.is_po: + # raise UserError('Sudah pernah di create PO') + # current_time = datetime.now() + # vendor_ids = self.env['requisition.line'].read_group([('requisition_id', '=', self.id), ('partner_id', '!=', False)], fields=['partner_id'], groupby=['partner_id']) - counter_po_number = 0 - po_ids = [] - for vendor in vendor_ids: - param_header = { - 'partner_id': vendor['partner_id'][0], - # 'partner_ref': self.sale_order_id.name, - 'currency_id': 12, - 'user_id': self.env.user.id, - 'company_id': 1, # indoteknik dotcom gemilang - 'picking_type_id': 28, # indoteknik bandengan receipts - 'date_order': current_time, - 'sale_order_id': self.sale_order_id.id, - 'note_description': 'from Purchase Requisition' - } - param_requisition_line = [ - ('requisition_id', '=', self.id), - ('partner_id', '=', vendor['partner_id'][0]), - ('qty_purchase', '>', 0) - ] - # new_po = self.env['purchase.order'].create([param_header]) - products_vendors = self.env['requisition.line'].search(, order='brand_id') - count = brand_id = 0 - - for product in products_vendors: - if count > 200 or brand_id != product.brand_id.id: - continue - - count = 0 - counter_po_number += 1 - new_po = self.env['purchase.order'].create([param_header]) - new_po.name = new_po.name + "/R/"+str(counter_po_number) - self.env['requisition.purchase.match'].create([{ - 'requisition_id': self.id, - 'order_id': new_po.id - }]) - po_ids.append(new_po.id) - self.env.cr.commit() - # else: - # new_po = self.env['purchase.order'].create([param_header]) - brand_id = product.brand_id.id - count += 10 - - # qty_available = product.product_id.qty_onhand_bandengan + product.product_id.qty_incoming_bandengan - product.product_id.outgoing_qty - # suggest = 'harus beli' - # if qty_available > product.qty_purchase: - # suggest = 'masih cukup' - - tax = [22] - - param_line = { + # counter_po_number = 0 + # po_ids = [] + # for vendor in vendor_ids: + # param_header = { + # 'partner_id': vendor['partner_id'][0], + # # 'partner_ref': self.sale_order_id.name, + # 'currency_id': 12, + # 'user_id': self.env.user.id, + # 'company_id': 1, # indoteknik dotcom gemilang + # 'picking_type_id': 28, # indoteknik bandengan receipts + # 'date_order': current_time, + # 'sale_order_id': self.sale_order_id.id, + # 'note_description': 'from Purchase Requisition' + # } + # param_requisition_line = [ + # ('requisition_id', '=', self.id), + # ('partner_id', '=', vendor['partner_id'][0]), + # ('qty_purchase', '>', 0) + # ] + # # new_po = self.env['purchase.order'].create([param_header]) + # products_vendors = self.env['requisition.line'].search(, order='brand_id') + # count = brand_id = 0 + + # for product in products_vendors: + # if count > 200 or brand_id != product.brand_id.id: + # continue + + # count = 0 + # counter_po_number += 1 + # new_po = self.env['purchase.order'].create([param_header]) + # new_po.name = new_po.name + "/R/"+str(counter_po_number) + # self.env['requisition.purchase.match'].create([{ + # 'requisition_id': self.id, + # 'order_id': new_po.id + # }]) + # po_ids.append(new_po.id) + # self.env.cr.commit() + # # else: + # # new_po = self.env['purchase.order'].create([param_header]) + # brand_id = product.brand_id.id + # count += 10 + + # # qty_available = product.product_id.qty_onhand_bandengan + product.product_id.qty_incoming_bandengan - product.product_id.outgoing_qty + # # suggest = 'harus beli' + # # if qty_available > product.qty_purchase: + # # suggest = 'masih cukup' + + # tax = [22] + + # param_line = { - 'sequence': count, - 'product_id': product.product_id.id, - 'product_qty': product.qty_purchase, - 'product_uom_qty': product.qty_purchase, - 'price_unit': product.price_unit, - 'taxes_id': tax, - # 'qty_available_store': qty_available, - # 'suggest': suggest, - } - new_line = self.env['purchase.order.line'].create([param_line]) - if new_po: - new_line.write({ - 'order_id': new_po.id, - }) - product.current_po_id = new_po.id - product.current_po_line_id = new_line.id - _logger.info('Create PO Line %s' % product.product_id.name) - # self.notification = self.notification + ' %s' % new_po.name - self.is_po = True - if po_ids: - return { - 'name': _('Purchase Order'), - 'view_mode': 'tree,form', - 'res_model': 'purchase.order', - 'target': 'current', - 'type': 'ir.actions.act_window', - 'domain': [('id', 'in', po_ids)], - } + # 'sequence': count, + # 'product_id': product.product_id.id, + # 'product_qty': product.qty_purchase, + # 'product_uom_qty': product.qty_purchase, + # 'price_unit': product.price_unit, + # 'taxes_id': tax, + # # 'qty_available_store': qty_available, + # # 'suggest': suggest, + # } + # new_line = self.env['purchase.order.line'].create([param_line]) + # if new_po: + # new_line.write({ + # 'order_id': new_po.id, + # }) + # product.current_po_id = new_po.id + # product.current_po_line_id = new_line.id + # _logger.info('Create PO Line %s' % product.product_id.name) + # # self.notification = self.notification + ' %s' % new_po.name + # self.is_po = True + # if po_ids: + # return { + # 'name': _('Purchase Order'), + # 'view_mode': 'tree,form', + # 'res_model': 'purchase.order', + # 'target': 'current', + # 'type': 'ir.actions.act_window', + # 'domain': [('id', 'in', po_ids)], + # } class RequisitionLine(models.Model): _name = 'requisition.line' -- cgit v1.2.3 From fe804076d721bd9c820714119796df5868ddac17 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 31 Jan 2024 16:27:59 +0700 Subject: fix error id --- indoteknik_custom/models/requisition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index f3dd5093..a61a5008 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -97,7 +97,7 @@ class Requisition(models.Model): for line in lines: product = line.product_id param_line = { - 'product_id': product.product_id.id, + 'product_id': product.id, 'product_qty': product.qty_purchase, 'product_uom_qty': product.qty_purchase, 'price_unit': product.price_unit, -- cgit v1.2.3 From 61106232cf4563d1d59dad97833f2c3ed2f36298 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 1 Feb 2024 08:42:44 +0700 Subject: fix error requisition --- indoteknik_custom/models/requisition.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index a61a5008..ec369777 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -98,9 +98,9 @@ class Requisition(models.Model): product = line.product_id param_line = { 'product_id': product.id, - 'product_qty': product.qty_purchase, - 'product_uom_qty': product.qty_purchase, - 'price_unit': product.price_unit, + 'product_qty': line.qty_purchase, + 'product_uom_qty': line.qty_purchase, + 'price_unit': line.price_unit, 'taxes_id': tax, } new_po_line = self.env['purchase.order.line'].create([param_line]) -- cgit v1.2.3 From e698f0fb7f0ca1af02fd242e311ef30a6923c0b0 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 1 Feb 2024 08:54:56 +0700 Subject: trying to fix error requisition --- indoteknik_custom/models/requisition.py | 1 + 1 file changed, 1 insertion(+) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index ec369777..6fe65f5e 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -100,6 +100,7 @@ class Requisition(models.Model): 'product_id': product.id, 'product_qty': line.qty_purchase, 'product_uom_qty': line.qty_purchase, + 'product_uom_qty': product.uom_po_id.id, 'price_unit': line.price_unit, 'taxes_id': tax, } -- cgit v1.2.3 From 396094a96ec54e78887111739d10ae6ab661d23e Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 1 Feb 2024 08:55:57 +0700 Subject: change name data on object --- indoteknik_custom/models/requisition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 6fe65f5e..d2cb7ecf 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -100,7 +100,7 @@ class Requisition(models.Model): 'product_id': product.id, 'product_qty': line.qty_purchase, 'product_uom_qty': line.qty_purchase, - 'product_uom_qty': product.uom_po_id.id, + 'product_uom': product.uom_po_id.id, 'price_unit': line.price_unit, 'taxes_id': tax, } -- cgit v1.2.3 From e948221236257983529358c39f263ccbdf73b1c6 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 1 Feb 2024 09:01:54 +0700 Subject: trying to fix error requisition --- indoteknik_custom/models/requisition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index d2cb7ecf..0607dc84 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -100,7 +100,7 @@ class Requisition(models.Model): 'product_id': product.id, 'product_qty': line.qty_purchase, 'product_uom_qty': line.qty_purchase, - 'product_uom': product.uom_po_id.id, + 'name': product.name, 'price_unit': line.price_unit, 'taxes_id': tax, } -- cgit v1.2.3 From f53bdfb91b2f91765aa9d61842f41b571fe12cee Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Thu, 1 Feb 2024 09:03:18 +0700 Subject: compute commision percent --- indoteknik_custom/models/commision.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/indoteknik_custom/models/commision.py b/indoteknik_custom/models/commision.py index a9ad624c..955d1634 100644 --- a/indoteknik_custom/models/commision.py +++ b/indoteknik_custom/models/commision.py @@ -159,12 +159,14 @@ class CustomerCommision(models.Model): @api.constrains('commision_percent') def _onchange_commision_percent(self): print('masuk onchange commision percent') - self.commision_amt = self.commision_percent * self.total_dpp // 100 + if self.commision_amt == 0: + self.commision_amt = self.commision_percent * self.total_dpp // 100 - # @api.constrains('commision_amt') - # def _onchange_commision_amt(self): - # print('masuk onchange commision amt') - # self.commision_percent = (self.commision_amt / self.grand_total * 100) + @api.constrains('commision_amt') + def _onchange_commision_amt(self): + print('masuk onchange commision amt') + if self.commision_percent == 0: + self.commision_percent = (self.commision_amt / self.total_dpp * 100) def _compute_total_dpp(self): for data in self: @@ -176,6 +178,11 @@ class CustomerCommision(models.Model): @api.model def create(self, vals): vals['number'] = self.env['ir.sequence'].next_by_code('customer.commision') or '0' + # if vals['commision_amt'] > 0: + # commision_amt = vals['commision_amt'] + # total_dpp = vals['total_dpp'] + # commision_percent = commision_amt / total_dpp * 100 + # vals['commision_percent'] = commision_percent result = super(CustomerCommision, self).create(vals) return result -- cgit v1.2.3 From 7e59db23fb69402cd622c7a932e8e980ab216151 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 1 Feb 2024 09:04:04 +0700 Subject: trying to fix error requisition --- indoteknik_custom/models/requisition.py | 1 + 1 file changed, 1 insertion(+) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 0607dc84..5072b394 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -97,6 +97,7 @@ class Requisition(models.Model): for line in lines: product = line.product_id param_line = { + 'order_id' : new_po.id, 'product_id': product.id, 'product_qty': line.qty_purchase, 'product_uom_qty': line.qty_purchase, -- cgit v1.2.3 From fe086f5052ab5ba66c458ce25d50f7804c705211 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 1 Feb 2024 09:16:03 +0700 Subject: fix return --- indoteknik_custom/models/requisition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 5072b394..2b148c96 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -44,7 +44,7 @@ class Requisition(models.Model): po_ids = [] for vendor in vendor_ids: result_po = self.create_po_by_vendor(vendor['partner_id'][0]) - po_ids.append(result_po) + po_ids += result_po return { 'name': _('Purchase Order'), 'view_mode': 'tree,form', -- cgit v1.2.3 From 6f0b80656e318914d56d085f9b9e08ccd9838450 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 1 Feb 2024 11:41:28 +0700 Subject: fix bug qty purchase and change request fiture delete line --- indoteknik_custom/models/purchase_order.py | 4 ++-- indoteknik_custom/models/purchase_order_line.py | 28 +++++++++++++++++++++++++ indoteknik_custom/views/purchase_order.xml | 4 ++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index ebadff06..67299d2c 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -54,9 +54,9 @@ class PurchaseOrder(models.Model): revisi_po = fields.Boolean(string='Revisi', tracking=3) def delete_line(self): - lines_to_delete = self.order_line.filtered(lambda line: line.delete_line) + lines_to_delete = self.order_line.filtered(lambda line: line.suggest == 'masih cukup') if not lines_to_delete: - raise UserError('Tidak ada item yang dipilih') + raise UserError('Tidak ada item yang masih cukup') lines_to_delete.unlink() def open_form_multi_confirm_po(self): diff --git a/indoteknik_custom/models/purchase_order_line.py b/indoteknik_custom/models/purchase_order_line.py index 465944d5..f1881942 100755 --- a/indoteknik_custom/models/purchase_order_line.py +++ b/indoteknik_custom/models/purchase_order_line.py @@ -36,6 +36,34 @@ class PurchaseOrderLine(models.Model): note = fields.Char(string='Note') qty_reserved = fields.Float(string='Qty Reserved', compute='_compute_qty_reserved') delete_line = fields.Boolean(string='Delete', default=False, help='centang ini jika anda ingin menghapus line ini') + is_edit_product_qty = fields.Boolean(string='Is Edit Product Qty', compute='_compute_is_edit_product_qty') + + def _compute_is_edit_product_qty(self): + for line in self: + + if line.order_id.state in ['draft']: + is_valid = True + else: + is_valid = False + + line.is_edit_product_qty = is_valid + + # @api.constrains('product_qty') + # def change_qty_po_and_qty_demand(self): + # for line in self: + # if line.order_id.state in ['draft', 'cancel'] and len(line.order_id.picking_ids) == 0: + # continue + + # for stock_picking in line.order_id.picking_ids: + # picking = self.env['stock.move'].search([ + # ('picking_id.purchase_id', '=', line.order_id.id), + # ('product_id', '=', line.product_id.id) + # ]) + + # if picking: + # picking.write({ + # 'product_uom_qty': line.product_qty + # }) def _compute_qty_reserved(self): for line in self: diff --git a/indoteknik_custom/views/purchase_order.xml b/indoteknik_custom/views/purchase_order.xml index 48443057..52e98787 100755 --- a/indoteknik_custom/views/purchase_order.xml +++ b/indoteknik_custom/views/purchase_order.xml @@ -52,12 +52,12 @@ - {'no_create': True} + @@ -102,7 +102,7 @@ - {'readonly': [], 'required': True} + {'readonly': [('is_edit_product_qty', '=', False)], 'required': True} -- cgit v1.2.3 From d6c7fad834f954f892cea0eb9e082db822bc8f2b Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 2 Feb 2024 08:58:09 +0700 Subject: fix error purchase pricelist --- indoteknik_custom/models/purchase_pricelist.py | 27 +++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/indoteknik_custom/models/purchase_pricelist.py b/indoteknik_custom/models/purchase_pricelist.py index 805ebc89..67b22e4c 100755 --- a/indoteknik_custom/models/purchase_pricelist.py +++ b/indoteknik_custom/models/purchase_pricelist.py @@ -39,8 +39,7 @@ class PurchasePricelist(models.Model): if price_unit == 0: self.include_price = 0 return - # taxes = self.taxes_system_id or self.taxes_product_id - # price_unit = self.system_price or self.product_price + tax_include = taxes.price_include if taxes: if tax_include: @@ -53,18 +52,20 @@ class PurchasePricelist(models.Model): self.include_price = price_unit def _get_valid_price(self): - p_price = 0 - taxes = False + purchase_price = self + price = 0 + taxes = None + human_last_update = purchase_price.human_last_update or datetime.min + system_last_update = purchase_price.system_last_update or datetime.min - if self.system_price > 0: - if self.product_price > 0 and self.human_last_update > self.system_last_update: - p_price, taxes = self.product_price, self.taxes_product_id - else: - p_price, taxes = self.system_price, self.taxes_system_id - elif self.product_price > 0: - p_price, taxes = self.product_price, self.taxes_product_id - - return p_price, taxes + if system_last_update > human_last_update: + price = purchase_price.system_price + taxes = purchase_price.taxes_system_id + else: + price = purchase_price.product_price + taxes = purchase_price.taxes_product_id + + return price, taxes @api.constrains('vendor_id', 'product_id') def _check_duplicate_purchase_pricelist(self): -- cgit v1.2.3 From 8978868864925683d02342112020e7fc047a4acf Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 2 Feb 2024 13:32:55 +0700 Subject: logbook sj and mark as cancel po --- indoteknik_custom/__manifest__.py | 11 +++ indoteknik_custom/models/__init__.py | 11 +++ indoteknik_custom/models/logbook_sj.py | 117 +++++++++++++++++++++++++ indoteknik_custom/models/po_multi_cancel.py | 22 +++++ indoteknik_custom/models/purchase_order.py | 19 ++++ indoteknik_custom/models/report_logbook_sj.py | 34 +++++++ indoteknik_custom/security/ir.model.access.csv | 17 +++- indoteknik_custom/views/logbook_sj.xml | 52 +++++++++++ indoteknik_custom/views/po_multi_cancel.xml | 31 +++++++ indoteknik_custom/views/purchase_order.xml | 9 ++ indoteknik_custom/views/report_logbook_sj.xml | 90 +++++++++++++++++++ 11 files changed, 412 insertions(+), 1 deletion(-) create mode 100644 indoteknik_custom/models/logbook_sj.py create mode 100644 indoteknik_custom/models/po_multi_cancel.py create mode 100644 indoteknik_custom/models/report_logbook_sj.py create mode 100644 indoteknik_custom/views/logbook_sj.xml create mode 100644 indoteknik_custom/views/po_multi_cancel.xml create mode 100644 indoteknik_custom/views/report_logbook_sj.xml diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index c7e65b37..689103d8 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -107,6 +107,17 @@ 'views/purchase_order_multi_update.xml', 'views/purchase_order_multi_confirm.xml', 'views/invoice_reklas_penjualan.xml', +<<<<<<< Updated upstream +<<<<<<< Updated upstream + 'views/po_multi_cancel.xml', +======= + 'views/logbook_sj.xml', + 'views/report_logbook_sj.xml', +>>>>>>> Stashed changes +======= + 'views/logbook_sj.xml', + 'views/report_logbook_sj.xml', +>>>>>>> Stashed changes 'report/report.xml', 'report/report_banner_banner.xml', 'report/report_banner_banner2.xml', diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 76387ff8..4b29e71d 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -98,3 +98,14 @@ from . import purchase_order_multi_update from . import invoice_reklas_penjualan from . import purchase_order_multi_confirm from . import stock_quant +<<<<<<< Updated upstream +<<<<<<< Updated upstream +from . import po_multi_cancel +======= +from . import logbook_sj +from . import report_logbook_sj +>>>>>>> Stashed changes +======= +from . import logbook_sj +from . import report_logbook_sj +>>>>>>> Stashed changes diff --git a/indoteknik_custom/models/logbook_sj.py b/indoteknik_custom/models/logbook_sj.py new file mode 100644 index 00000000..567f1ae3 --- /dev/null +++ b/indoteknik_custom/models/logbook_sj.py @@ -0,0 +1,117 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import UserError +from pytz import timezone +from datetime import datetime + +class LogbookSJ(models.TransientModel): + _name = 'logbook.sj' + + name = fields.Char(string='Name', default='Logbook SJ') + logbook_sj_line = fields.One2many( + comodel_name='logbook.sj.line', + inverse_name='logbook_sj_id', + string='Logbook SJ Line' + ) + + def create_logbook_sj(self): + logbook_line = self.logbook_sj_line + + current_time = datetime.utcnow() + report_logbook_ids = [] + for line in logbook_line: + nomor_sj = line.name + picking = self.env['stock.picking'].search([ + ('picking_code', '=', nomor_sj), + ]) + parameters_header = { + 'name': nomor_sj, + 'date': current_time, + 'name_picking': picking.name, + 'partner_id': picking.partner_id.id, + } + + report_logbook = self.env['report.logbook.sj'].create([parameters_header]) + + + for stock in picking.move_line_ids_without_package: + data = { + 'product_id': stock.product_id.id, + 'location_id': stock.location_id.id, + 'product_uom_qty': stock.product_uom_qty, + 'qty_done': stock.qty_done, + 'product_uom_id': stock.product_uom_id.id, + 'report_logbook_sj_id': report_logbook.id + } + self.env['report.logbook.sj.line'].create([data]) + + report_logbook_ids.append(report_logbook.id) + line.unlink() + + self.unlink() + return { + 'name': _('Report Logbook SJ'), + 'view_mode': 'tree,form', + 'res_model': 'report.logbook.sj', + 'target': 'current', + 'type': 'ir.actions.act_window', + 'domain': [('id', 'in', report_logbook_ids)], + } + +class LogbookSJLine(models.TransientModel): + _name = 'logbook.sj.line' + + name = fields.Char(string='SJ Number') + driver_id = fields.Many2one(comodel_name='res.users', string='Driver') + departure_date = fields.Char(string='Departure Date') + arrival_date = fields.Char(string='Arrival Date') + carrier_id = fields.Many2one('delivery.carrier', string='Shipping Method') + tracking_no = fields.Char(string='Tracking No') + logbook_sj_id = fields.Many2one('logbook.sj', string='Logbook SJ') + partner_id = fields.Many2one('res.partner', string='Customer') + + @api.onchange('name') + def onchange_name(self): + current_time = datetime.now(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S') + + if self.name: + if len(self.name) == 13: + self.name = self.name[:-1] + picking = self.env['stock.picking'].search([('picking_code', '=', self.name)], limit=1) + if picking: + if picking.driver_id: + self.driver_id = picking.driver_id + else: + self.driver_id = self.env.uid + + sale_order = False + if picking.origin: + sale_order = self.env['sale.order'].search([('name', '=', picking.origin)], limit=1) + + if sale_order.carrier_id: + self.carrier_id = sale_order.carrier_id + + self.tracking_no = picking.delivery_tracking_no + + self.partner_id = picking.partner_id + + delivery_type = self.get_delivery_type(picking.driver_departure_date, picking.driver_arrival_date) + if delivery_type != 'departure': + self.departure_date = picking.driver_departure_date.astimezone(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S') + + if delivery_type == 'departure': + self.departure_date = current_time + elif delivery_type == 'arrival': + self.arrival_date = current_time + else: + self.arrival_date = picking.driver_arrival_date.astimezone(timezone('Asia/Jakarta')).strftime('%Y-%m-%d %H:%M:%S') + else: + raise UserError('Nomor DO tidak ditemukan') + + def get_delivery_type(self, driver_departure_date, driver_arrival_date): + delivery_type = 'departure' + if driver_departure_date: + delivery_type = 'arrival' + if driver_arrival_date: + delivery_type = False + + return delivery_type diff --git a/indoteknik_custom/models/po_multi_cancel.py b/indoteknik_custom/models/po_multi_cancel.py new file mode 100644 index 00000000..52c156b5 --- /dev/null +++ b/indoteknik_custom/models/po_multi_cancel.py @@ -0,0 +1,22 @@ +from odoo import models, fields +import logging + +_logger = logging.getLogger(__name__) + + +class PoMultiCancel(models.TransientModel): + _name = 'po.multi.cancel' + + def save_multi_cancel_po(self): + purchase_ids = self._context['purchase_ids'] + purchase = self.env['purchase.order'].browse(purchase_ids) + purchase.button_cancel() + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': 'Notification', + 'message': 'Status berhasil diubah', + 'next': {'type': 'ir.actions.act_window_close'}, + } + } \ No newline at end of file diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index 67299d2c..dc654196 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -53,6 +53,25 @@ class PurchaseOrder(models.Model): status_paid_cbd = fields.Boolean(string='Paid Status', tracking=3, help='Field ini diisi secara manual oleh Finance AP dan hanya untuk status PO CBD') revisi_po = fields.Boolean(string='Revisi', tracking=3) + @api.model + def action_multi_cancel(self): + for purchase in self: + purchase.update({ + 'state': 'cancel', + }) + + if purchase.state == 'cancel': + purchase.update({ + 'approval_status': False, + }) + + def open_form_multi_cancel(self): + action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_po_multi_cancel') + action['context'] = { + 'purchase_ids': [x.id for x in self] + } + return action + def delete_line(self): lines_to_delete = self.order_line.filtered(lambda line: line.suggest == 'masih cukup') if not lines_to_delete: diff --git a/indoteknik_custom/models/report_logbook_sj.py b/indoteknik_custom/models/report_logbook_sj.py new file mode 100644 index 00000000..d2008608 --- /dev/null +++ b/indoteknik_custom/models/report_logbook_sj.py @@ -0,0 +1,34 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError +from pytz import timezone +from datetime import datetime + +class ReportLogbookSJ(models.Model): + _name = 'report.logbook.sj' + + name = fields.Char(string='Nomor SJ', default='Logbook SJ') + date = fields.Datetime(string='Date') + name_picking = fields.Char(string='Picking Name') + partner_id = fields.Many2one('res.partner', string='Customer') + approve_by_finance = fields.Boolean(string='Approve By Finance') + report_logbook_sj_line = fields.One2many( + comodel_name='report.logbook.sj.line', + inverse_name='report_logbook_sj_id', + string='Logbook SJ Line' + ) + + def approve(self): + if self.env.user.is_accounting: + self.approve_by_finance = True + else: + raise UserError('Hanya Accounting yang bisa Approve') + +class ReportLogbookSJLine(models.Model): + _name = 'report.logbook.sj.line' + + product_id = fields.Many2one(comodel_name='product.product', string='Product') + location_id = fields.Many2one(comodel_name='stock.location', string='From') + product_uom_qty = fields.Float(string='Reserved') + qty_done = fields.Float(string='Done') + product_uom_id = fields.Many2one('uom.uom', string='Unit of Measure') + report_logbook_sj_id = fields.Many2one('report.logbook.sj', string='Logbook SJ') \ No newline at end of file diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 8d014b69..c2bfaa10 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -88,4 +88,19 @@ access_sale_advance_payment_inv,access.sale.advance.payment.inv,model_sale_advan access_purchase_order_multi_update,access.purchase.order.multi_update,model_purchase_order_multi_update,,1,1,1,1 access_invoice_reklas_penjualan,access.invoice.reklas.penjualan,model_invoice_reklas_penjualan,,1,1,1,1 access_invoice_reklas_penjualan_line,access.invoice.reklas.penjualan.line,model_invoice_reklas_penjualan_line,,1,1,1,1 -access_purchase_order_multi_confirm,access.purchase.order.multi_confirm,model_purchase_order_multi_confirm,,1,1,1,1 \ No newline at end of file +access_purchase_order_multi_confirm,access.purchase.order.multi_confirm,model_purchase_order_multi_confirm,,1,1,1,1 +<<<<<<< Updated upstream +<<<<<<< Updated upstream +access_po_multi_cancel,access.po.multi.cancel,model_po_multi_cancel,,1,1,1,1 +======= +access_logbook_sj,access.logbook.sj,model_logbook_sj,,1,1,1,1 +access_logbook_sj_line,access.logbook.sj.line,model_logbook_sj_line,,1,1,1,1 +access_report_logbook_sj,access.report.logbook.sj,model_report_logbook_sj,,1,1,1,1 +access_report_logbook_sj_line,access.report.logbook.sj.line,model_report_logbook_sj_line,,1,1,1,1 +>>>>>>> Stashed changes +======= +access_logbook_sj,access.logbook.sj,model_logbook_sj,,1,1,1,1 +access_logbook_sj_line,access.logbook.sj.line,model_logbook_sj_line,,1,1,1,1 +access_report_logbook_sj,access.report.logbook.sj,model_report_logbook_sj,,1,1,1,1 +access_report_logbook_sj_line,access.report.logbook.sj.line,model_report_logbook_sj_line,,1,1,1,1 +>>>>>>> Stashed changes diff --git a/indoteknik_custom/views/logbook_sj.xml b/indoteknik_custom/views/logbook_sj.xml new file mode 100644 index 00000000..9eb9aa12 --- /dev/null +++ b/indoteknik_custom/views/logbook_sj.xml @@ -0,0 +1,52 @@ + + + + Logbook SJ + logbook.sj + +
+ + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + Logbook SJ + logbook.sj + ir.actions.act_window + form + + new + + + +
\ No newline at end of file diff --git a/indoteknik_custom/views/po_multi_cancel.xml b/indoteknik_custom/views/po_multi_cancel.xml new file mode 100644 index 00000000..c17fc5a7 --- /dev/null +++ b/indoteknik_custom/views/po_multi_cancel.xml @@ -0,0 +1,31 @@ + + + + + PO Multi Cancel + po.multi.cancel + +
+ + + Apakah Anda Yakin Ingin Mengubah Status Menjadi Cancel? + + +
+
+
+
+
+ + + PO Multi Cancel + po.multi.cancel + ir.actions.act_window + form + + new + +
+
\ No newline at end of file diff --git a/indoteknik_custom/views/purchase_order.xml b/indoteknik_custom/views/purchase_order.xml index 52e98787..a6f28ffa 100755 --- a/indoteknik_custom/views/purchase_order.xml +++ b/indoteknik_custom/views/purchase_order.xml @@ -213,4 +213,13 @@ action = records.open_form_multi_confirm_po() + + + Cancel PO + + + code + action = records.open_form_multi_cancel() + + \ No newline at end of file diff --git a/indoteknik_custom/views/report_logbook_sj.xml b/indoteknik_custom/views/report_logbook_sj.xml new file mode 100644 index 00000000..52e00d17 --- /dev/null +++ b/indoteknik_custom/views/report_logbook_sj.xml @@ -0,0 +1,90 @@ + + + + report.logbook.sj.tree + report.logbook.sj + + + + + + + + + + + + + report.logbook.sj.line.tree + report.logbook.sj.line + + + + + + + + + + + + + report.logbook.sj.form + report.logbook.sj + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + Report Logbook SJ + ir.actions.act_window + report.logbook.sj + tree,form + + + + \ No newline at end of file -- cgit v1.2.3 From e8edbf3d6b2c2edd67a890a29fb6262794e730d9 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 2 Feb 2024 13:35:08 +0700 Subject: fix conflict --- indoteknik_custom/__manifest__.py | 8 -------- indoteknik_custom/models/__init__.py | 10 +--------- indoteknik_custom/security/ir.model.access.csv | 10 ---------- 3 files changed, 1 insertion(+), 27 deletions(-) diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index 689103d8..b8a5f6f8 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -107,17 +107,9 @@ 'views/purchase_order_multi_update.xml', 'views/purchase_order_multi_confirm.xml', 'views/invoice_reklas_penjualan.xml', -<<<<<<< Updated upstream -<<<<<<< Updated upstream 'views/po_multi_cancel.xml', -======= 'views/logbook_sj.xml', 'views/report_logbook_sj.xml', ->>>>>>> Stashed changes -======= - 'views/logbook_sj.xml', - 'views/report_logbook_sj.xml', ->>>>>>> Stashed changes 'report/report.xml', 'report/report_banner_banner.xml', 'report/report_banner_banner2.xml', diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 4b29e71d..9678329a 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -98,14 +98,6 @@ from . import purchase_order_multi_update from . import invoice_reklas_penjualan from . import purchase_order_multi_confirm from . import stock_quant -<<<<<<< Updated upstream -<<<<<<< Updated upstream from . import po_multi_cancel -======= from . import logbook_sj -from . import report_logbook_sj ->>>>>>> Stashed changes -======= -from . import logbook_sj -from . import report_logbook_sj ->>>>>>> Stashed changes +from . import report_logbook_sj \ No newline at end of file diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index c2bfaa10..31503dbe 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -89,18 +89,8 @@ access_purchase_order_multi_update,access.purchase.order.multi_update,model_purc access_invoice_reklas_penjualan,access.invoice.reklas.penjualan,model_invoice_reklas_penjualan,,1,1,1,1 access_invoice_reklas_penjualan_line,access.invoice.reklas.penjualan.line,model_invoice_reklas_penjualan_line,,1,1,1,1 access_purchase_order_multi_confirm,access.purchase.order.multi_confirm,model_purchase_order_multi_confirm,,1,1,1,1 -<<<<<<< Updated upstream -<<<<<<< Updated upstream access_po_multi_cancel,access.po.multi.cancel,model_po_multi_cancel,,1,1,1,1 -======= access_logbook_sj,access.logbook.sj,model_logbook_sj,,1,1,1,1 access_logbook_sj_line,access.logbook.sj.line,model_logbook_sj_line,,1,1,1,1 access_report_logbook_sj,access.report.logbook.sj,model_report_logbook_sj,,1,1,1,1 access_report_logbook_sj_line,access.report.logbook.sj.line,model_report_logbook_sj_line,,1,1,1,1 ->>>>>>> Stashed changes -======= -access_logbook_sj,access.logbook.sj,model_logbook_sj,,1,1,1,1 -access_logbook_sj_line,access.logbook.sj.line,model_logbook_sj_line,,1,1,1,1 -access_report_logbook_sj,access.report.logbook.sj,model_report_logbook_sj,,1,1,1,1 -access_report_logbook_sj_line,access.report.logbook.sj.line,model_report_logbook_sj_line,,1,1,1,1 ->>>>>>> Stashed changes -- cgit v1.2.3 From f5edc62d22c9a3973261ad289a11e189f0866f52 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 2 Feb 2024 13:36:48 +0700 Subject: fix conflict --- indoteknik_custom/models/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 9678329a..49e3567c 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -100,4 +100,4 @@ from . import purchase_order_multi_confirm from . import stock_quant from . import po_multi_cancel from . import logbook_sj -from . import report_logbook_sj \ No newline at end of file +from . import report_logbook_sj -- cgit v1.2.3