summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order.py
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-02-07 10:45:51 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-02-07 10:45:51 +0700
commitf6be42d37a363b86f4a9ec71ccb38c78cbe2d887 (patch)
tree9c297e776f67e35671012e94d3c64007bd5090d7 /indoteknik_custom/models/sale_order.py
parentedb3c1c80931078d40a8f56149aeca9efdcdc07d (diff)
parent29a9ec94f1ad131f398cf119a03a7b927a4c6cba (diff)
Merge branch 'production' into purchasing-job
# Conflicts: # indoteknik_custom/__manifest__.py # indoteknik_custom/models/__init__.py # indoteknik_custom/models/automatic_purchase.py # indoteknik_custom/models/purchase_order_line.py # indoteknik_custom/security/ir.model.access.csv # indoteknik_custom/views/automatic_purchase.xml # indoteknik_custom/views/purchase_order.xml
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
-rwxr-xr-xindoteknik_custom/models/sale_order.py58
1 files changed, 44 insertions, 14 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index b1a2f674..362ca574 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -1,6 +1,6 @@
from odoo import fields, models, api, _
-from odoo.exceptions import UserError
-from datetime import datetime
+from odoo.exceptions import UserError, ValidationError
+from datetime import datetime, timedelta
import logging, random, string, requests, math, json, re
_logger = logging.getLogger(__name__)
@@ -84,7 +84,21 @@ class SaleOrder(models.Model):
email = fields.Char(string='Email')
picking_iu_id = fields.Many2one('stock.picking', 'Picking IU')
helper_by_id = fields.Many2one('res.users', 'Helper By')
- # picking_ids = fields.Many2many('stock.picking', string='Pickings', compute='_get_pickings', readonly=True, copy=False, search="_search_picking_ids")
+ eta_date = fields.Datetime(string='ETA Date', copy=False, compute='_compute_eta_date')
+
+ def _compute_eta_date(self):
+ max_leadtime = 0
+
+ for line in self.order_line:
+ leadtime = line.vendor_id.leadtime
+ max_leadtime = max(max_leadtime, leadtime)
+
+ for rec in self:
+ if rec.date_order and rec.state not in ['cancel', 'draft']:
+ eta_date = datetime.now() + timedelta(days=max_leadtime)
+ rec.eta_date = eta_date
+ else:
+ rec.eta_date = False
def _prepare_invoice(self):
"""
@@ -109,6 +123,7 @@ class SaleOrder(models.Model):
'medium_id': self.medium_id.id,
'source_id': self.source_id.id,
'user_id': self.user_id.id,
+ 'sale_id': self.id,
'invoice_user_id': self.user_id.id,
'team_id': self.team_id.id,
'partner_id': parent_id.id,
@@ -131,7 +146,7 @@ class SaleOrder(models.Model):
pattern = rf'^{rule_regex}$'
if self.email and not re.match(pattern, self.email):
- raise UserError('Email harus menggunakan karakter @')
+ raise UserError('Email yang anda input kurang valid')
def override_allow_create_invoice(self):
if not self.env.user.is_accounting:
@@ -249,17 +264,18 @@ class SaleOrder(models.Model):
('state', 'in', so_state),
('so_status', '!=', 'terproses'),
])
+
for sale in sales:
- picking_states = {'draft', 'assigned', 'confirmed', 'waiting'}
+ picking_states = ['draft', 'assigned', 'confirmed', 'waiting']
have_outstanding_pick = any(x.state in picking_states for x in sale.picking_ids)
sum_qty_so = sum(so_line.product_uom_qty for so_line in sale.order_line)
sum_qty_ship = sum(so_line.qty_delivered for so_line in sale.order_line)
- if not have_outstanding_pick:
- sale.so_status = 'terproses'
- elif sum_qty_so > sum_qty_ship > 0:
+ if sum_qty_so > sum_qty_ship > 0:
sale.so_status = 'sebagian'
+ elif not have_outstanding_pick:
+ sale.so_status = 'terproses'
else:
sale.so_status = 'menunggu'
@@ -347,9 +363,14 @@ class SaleOrder(models.Model):
minimum_amount = 20000000
for order in self:
order.have_visit_service = self.amount_total > minimum_amount
+
+ def _get_helper_ids(self):
+ helper_ids_str = self.env['ir.config_parameter'].sudo().get_param('sale.order.user_helper_ids')
+ return helper_ids_str.split(', ')
def write(self, values):
- if self.env.user.id in [991, 20, 1180]:
+ helper_ids = self._get_helper_ids()
+ if str(self.env.user.id) in helper_ids:
values['helper_by_id'] = self.env.user.id
return super(SaleOrder, self).write(values)
@@ -367,22 +388,31 @@ class SaleOrder(models.Model):
order.is_warning = False
def _validate_order(self):
+ if self.payment_term_id.id == 31 and self.total_percent_margin < 25:
+ raise UserError("Jika ingin menggunakan Tempo 90 Hari maka margin harus di atas 25%")
+
if self.warehouse_id.id != 8: #GD Bandengan
raise UserError('Gudang harus Bandengan')
+
if self.state not in ['draft', 'sent']:
raise UserError("Status harus draft atau sent")
- if not self._validate_npwp():
- raise UserError("Isi NPWP Dengan Benar!")
+
+ self._validate_npwp()
def _validate_npwp(self):
- pattern = r'^\d{2}\.\d{3}\.\d{3}\.\d{1}-\d{3}\.\d{3}$'
- return re.match(pattern, self.npwp) is not None
+ num_digits = sum(c.isdigit() for c in self.npwp)
+
+ if num_digits < 10:
+ raise UserError("NPWP harus memiliki minimal 10 digit")
+
+ # pattern = r'^\d{10,}$'
+ # return re.match(pattern, self.npwp) is not None
def sale_order_approve(self):
self.check_due()
+ self._validate_order()
for order in self:
- order._validate_order()
order.order_line.validate_line()
partner = order.partner_id.parent_id or order.partner_id