diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-02-07 10:45:51 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-02-07 10:45:51 +0700 |
| commit | f6be42d37a363b86f4a9ec71ccb38c78cbe2d887 (patch) | |
| tree | 9c297e776f67e35671012e94d3c64007bd5090d7 /indoteknik_custom/models/sale_order.py | |
| parent | edb3c1c80931078d40a8f56149aeca9efdcdc07d (diff) | |
| parent | 29a9ec94f1ad131f398cf119a03a7b927a4c6cba (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-x | indoteknik_custom/models/sale_order.py | 58 |
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 |
